4
allInstancesOfFoo = []

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

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

这样做会创建第 1-3 条的副本并将它们放在该列表中,还是会在该列表中简单地为它们添加一个“参考”。而且,我知道 Python 中没有 C 风格的引用,但目前我想不出更好的词来形容它。

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

4

1 回答 1

3

在这种情况下,您的列表将包含对原始对象( 和 )的引用bar1——bar2不会bar3复制。

例如:

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
于 2013-03-01T20:22:37.060 回答