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

この場合、リストには元のオブジェクト ( bar1bar2および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 に答える