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)
我想在这里澄清一些错误信息.这与"整体不可变"这一事实并没有任何关系.当你写a = 2你的分配a和a单独不同的东西-它有没有影响b和c.
如果要修改属性的a但是,那么它会影响b和c.希望这个例子能更好地说明我在说什么:
>>> 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)
你所要求的不太实际,也是不可能的。这是一种疯狂的做法:
>>> 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)