此代码是复制对象还是引用它?

时间:2015-12-07 23:40:43

标签: python object reference

我有一些代码,其中一个对象包含两个其他对象的列表,这两个对象密切相关。我希望这些对象在不重复数据的情况下相互引用。 在以下代码中,是

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

1 个答案:

答案 0 :(得分:3)

在python中,一旦初始化的对象只占用一个物理位置。 重新分配和作为参数传递不会导致同一对象的多个副本。以同样的方式,在一个位置修改对象会影响所有其他位置。

除非执行深层复制,否则内存中对象的物理存在不会重复。

不,您的代码不会复制对象。它只是引用了2个不同的列表。

希望这能回答你的疑问。