Я пытаюсь понять мелкие копии (ссылки).
Я создал класс, который должен делать мелкие копии экземпляра, если он уже существует, но мой код создает отдельные экземпляры.
Цель заключается в том, что если я попытаюсь создать новый объект с тем же значением x, что и существующий объект, я должен создать ссылку на существующий объект, а не новый объект.
from copy import copy
class Foo(object):
def __init__(self, x):
seen = set()
if x not in seen:
self.x = x
seen.add(x)
else:
self.x = copy(self.x)
f1 = Foo(10)
f2 = Foo(10)
f3 = Foo(10)
s = {f1, f2, f3}
for i in s:
print(i)
Это дает:
<__main__.Foo object at 0x03B21110>
<__main__.Foo object at 0x03AFB5B0>
<__main__.Foo object at 0x03B21150>
У меня должен быть только один объект в наборе (в данном случае), так как все объекты были созданы с одинаковым значением x.