我有一些代码,其中一个对象包含两个其他对象的列表,这两个对象密切相关。我希望这些对象在不重复数据的情况下相互引用。 在以下代码中,是
Parent.foo[0].bar
对
的引用Parent.bar[0]
还是重复一遍?
class Parent(object):
def __init__(self, data):
self.data = data
self.foo = []
self.bar = []
def populate(self):
for item in self.data:
self.foo.append(Foo(item['foo']))
self.bar.append(Bar(item['bar']))
self.foo[-1].bar = self.bar[-1]
self.bar[-1].foo = self.foo[-1]
class Foo(object):
def __init__(self, data):
self.data = data
class Bar(object):
def __init__(self, data):
self.data = data
答案 0 :(得分:3)
在python中,一旦初始化的对象只占用一个物理位置。 重新分配和作为参数传递不会导致同一对象的多个副本。以同样的方式,在一个位置修改对象会影响所有其他位置。
除非执行深层复制,否则内存中对象的物理存在不会重复。
不,您的代码不会复制对象。它只是引用了2个不同的列表。
希望这能回答你的疑问。