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

2024-05-15 01:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

全部:

a = 1
b = a
c = b

现在我想得到一个标记了对象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

在其他语言中,比如C,a,b,C,如果我重新赋值a=2,那么应该是2,但是在python中,没有reference这样的东西,所以改变所有bc值的唯一方法是a=b=C=2,据我所知,这就是为什么要得到一个对象的所有引用。


Tags: 对象方法标记语言列表术语referenceprint
3条回答

你的要求不太实际,也不可能。有一个疯狂的方法:

>>> 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']

如你所见,不可能全部找到。

>>> sys.getrefcount(1)
791
>>> sys.getrefcount(2)
267
>>> sys.getrefcount(3)
98

我想澄清一些误传。这实际上与“int是不可变的”这一事实无关。当你写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

相关问题 更多 >

    热门问题