如何在Python中获取对象的引用列表?

use*_*514 8 python variables reference

所有:

a = 1
b = a
c = b
Run Code Online (Sandbox Code Playgroud)

现在我想获得一个1标记对象的列表,这是[a, b, c].我怎么能这样做?

顺便说一句,如何在这里正式调用变量"a"?我知道到目前为止它是对象的"对象标签",但我不知道它的用语是什么.

谢谢!

为什么我需要这个:

a = b = c = 1 
print a, b, c 
1 1 1
a = 2
print a, b, c 
2 1 1
Run Code Online (Sandbox Code Playgroud)

在其他语言中,如C,a,b,c应该是2,如果我重新指定a = 2,但在python中,没有像引用这样的东西,所以改变abc的所有值的唯一方法是a = b = c = 2据我所知,这就是为什么要获得对象的所有引用.

Kab*_*bie 10

如你所见,找不到它们是不可能的.

>>> sys.getrefcount(1)
791
>>> sys.getrefcount(2)
267
>>> sys.getrefcount(3)
98
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 7

我想在这里澄清一些错误信息.这与"整体不可变"这一事实并没有任何关系.当你写a = 2你的分配aa单独不同的东西-它有没有影响bc.

如果要修改属性a但是,那么它影响bc.希望这个例子能更好地说明我在说什么:

>>> a = b = c = [1]  # assign everyone to the same object
>>> a, b, c
([1], [1], [1])
>>> a[0] = 2         # modify a member of a
>>> a, b, c
([2], [2], [2])      # everyone gets updated because they all refer to the same object
>>> a = [3]          # assign a to a new object
>>> a, b, c
([3], [2], [2])      # b and c are not affected
Run Code Online (Sandbox Code Playgroud)


Eri*_*lun 5

我想你可能对objgraph. 它允许您遍历内存中的对象图,或转储PNG对象图。它对于调试内存泄漏很有用。

请参阅此页面:http : //mg.pov.lt/objgraph/


Chr*_*gan 2

你所要求的不太实际,也是不可能的。这是一种疯狂的做法:

>>> a = 1
>>> b = a
>>> c = b
>>> locals()
{'a': 1, 'c': 1, 'b': 1, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> [key for key, value in locals().items() if value == 1]
['a', 'c', 'b']
>>> globals()
{'a': 1, 'c': 1, 'b': 1, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> [key for key, value in globals().items() if value == 1]
['a', 'c', 'b']
Run Code Online (Sandbox Code Playgroud)