Python:变量的副本

Cri*_*spy 11 python variables copy

有没有办法复制变量,这样当变量'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
Run Code Online (Sandbox Code Playgroud)

我在使用Tkinter库时遇到问题,我有一个已存储在列表中的checkbutton,我正在尝试获取它所拥有的变量.

但是需要大约5行代码才能到达变量.

有没有办法保持变量的副本在checkbutton变量发生变化时发生变化?

mgi*_*son 12

您正在探索Python如何处理引用.赋值只是绑定对右侧对象的引用.所以,这有点微不足道:

a = 'foo'
b = a
print b is a  #True -- They *are the same object*
Run Code Online (Sandbox Code Playgroud)

但是,只要你这样做:

b = 'bar'
b is a  #False -- they're not longer the same object because you assigned a new object to b
Run Code Online (Sandbox Code Playgroud)

现在,对于可变的对象,这变得非常有趣:

a = [1]
b = a
b[0] = 'foo'
print a  #What?? 'a' changed?
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a更改因为ba引用相同的对象.当我们改变b(我们可以做,因为它是可变的)时,可以看到同样的变化,a因为它们是同一个对象.

因此,要回答您的问题,您不能直接执行此操作,但如果您使用可变类型(如列表)来存储您携带的实际数据,则可以间接执行此操作.


这是一件非常重要的Python代码时要了解,这是不是有很多语言的工作方式,所以是值得认真思考/研究,直到你真正了解它.

  • 我来这里是为了找到一种方法来防止第三种情况下的行为(要复制的对象是可变的)。如果其他人想要相同的信息,我最终发现除了使用 copy.copy 或 copy.deepcopy 之外,您还可以使用以下语法来创建新对象并否定原始对象的可变性 - 如果所需的对象当然可以用这样的方式实例化: ```new_list = list(L) # copy new_dict = dict(olddict) # copy new_set = set(L) # Convert list to set new_tuple = tuple(L) # Convert list to元组``` (3认同)