是否有办法复制变量,以便当变量'a'的值发生变化时,它会将自身复制到变量'b'?
实施例
a='hello'
b=a #.copy() or a function that will make a copy
a='bye'
# Is there a way to make
# 'b' equal 'a' without
# doing 'b=a'
print a
print b
我在使用Tkinter库时遇到问题,我有一个已存储在列表中的复选按钮,我正在尝试获取它所拥有的变量。
但需要 5行代码才能到达变量。
答案 0 :(得分:12)
您正在探索Python如何处理引用。赋值只是绑定对右侧对象的引用。所以,这有点微不足道:
a = 'foo'
b = a
print b is a #True -- They *are the same object*
然而,只要你这样做:
b = 'bar'
b is a #False -- they're not longer the same object because you assigned a new object to b
现在,对于 mutable :
的对象,这真的很有趣a = [1]
b = a
b[0] = 'foo'
print a #What?? 'a' changed?
在这种情况下,a
会发生变化,因为b
和a
引用了同一个对象。当我们对b
进行更改时(我们可以做,因为它是可变的),在a
看到相同的更改,因为它们是同一个对象。
所以,要回答你的问题,你不能直接这样做,但如果你使用一个可变类型(如列表)来存储你携带的实际数据,你可以间接地做到这一点。
这在使用Python代码时非常重要,并且它不是很多语言的工作方式,因此在真正理解它之前,真正考虑/研究它是值得的。
答案 1 :(得分:1)
简而言之,通过简单的值分配,您无法执行此操作。如你所见:
a=4
b=a
a=5
>>> print b
4
但是,对于像列表这样的可变对象,可以执行此操作。就这样:
a=[1]
b=a
a.append(2)
>>> print a
[1,2]
>>> print b
[1,2]
答案 2 :(得分:1)
根据您的目的,您可能需要查看weakref module。
这允许您拥有一个主要对象,然后在主要对象消失后立即成为None
的几个副本。
答案 3 :(得分:0)
您在询问是否可以创建对变量的引用并保留另一个变量。不,这是不可能的。参见例如Create a reference to a variable (similar to PHP's "=&")?
答案 4 :(得分:0)
通过临时列表创建简单变量的独立副本的方法很丑:
a = 6;
b = [a][0]