将类的实例添加到列表中是复制实例还是只是“引用”它?

时间:2013-03-01 20:21:18

标签: python instances

allInstancesOfFoo = []

class foo(object):
    def __init__(self)
        allInstancesOfFoo.append(self)

bar1=foo()
bar2=foo()
bar3=foo()

这样做会创建条形图1-3的副本并将它们放在该列表中,或者只是在该列表中为它们添加一个“引用”。而且,我知道Python中没有C风格的引用,但我现在想不出一个更好的词。

此外,对不起,如果这是一个荒谬的问题,我只想确保这样做不会占用它不需要的资源。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您的列表将包含对原始对象的引用(bar1bar2bar3) - 不会制作副本。

例如:

allInstancesOfFoo = []

class foo(object):
    def __init__(self):
        allInstancesOfFoo.append(self)

bar1=foo()
bar2=foo()
bar3=foo()
print bar1 is allInstancesOfFoo[0]  #True

作为旁注,如果您制作allInstancesOfFoo的浅表副本,那么它也只会对现有对象进行新的引用:

all_instances_of_foo = allInstancesOfFoo[:]
print all(x is y for x,y in zip(all_instances_of_foo,allInstancesOfFoo))  #True