Python:变量的副本

时间:2012-11-24 04:27:29

标签: 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

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

但需要 5行代码才能到达变量。

当checkbutton变量发生变化时,有没有办法保存变量的副本?

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会发生变化,因为ba引用了同一个对象。当我们对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]