Nếu tôi có một đối tượng so sánh với một phần tử của một bộ Python, nhưng không phải là cùng một đối tượng, có cách nào hợp lý để có được một tham chiếu đến đối tượng trong bộ này không? Trường hợp sử dụng sẽ sử dụng bộ này để xác định và chia sẻ dữ liệu trùng lặp.Làm thế nào để truy cập vào một phần tử của một tập hợp bằng cách sử dụng một đối tượng tương đương?
Ví dụ (Python 2.7):
>>> a = "This is a string"
>>> b = "This is a string"
>>> a is b
False
>>> a == b
True
>>> s = set((a,))
>>> b in s
True
Làm thế nào để có được một tài liệu tham khảo để a
sử dụng b
và s
? Tôi có thể nghĩ ra một cách, nhưng tôi không chắc chắn liệu nó có phụ thuộc vào việc thực hiện hay không bạn có nhận được a
hoặc b
hay không. EDIT: Điều này không hoạt động khi s có nhiều hơn một phần tử; ngã tư là khá tự nhiên thực hiện một cái gì đó giống như [x for x in smaller_set if x in larger_set]
>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True
Có lẽ một workaround tốt sẽ được sử dụng một dict mà các bản đồ mỗi chìa khóa để bản thân, thay vì các thiết lập.
Nếu bạn cần một trong hai đối tượng bằng nhau, có thể băm, có vẻ như các đối tượng không được bằng nhau và/hoặc có thể băm. Tại sao bạn cần điều này? – delnan
Tôi nghĩ rằng sự nghi ngờ của bạn là hợp lý: pypy 1.7.0 và ironpython 3.0 cả hai (có thể) trả về False cho c cuối cùng của bạn là a. – DSM
Tôi có thể lưu bộ nhớ bằng cách thay đổi tham chiếu đến đối tượng bằng nhau thành tham chiếu đến cùng một đối tượng. –