Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:变量的副本_Python_Variables_Copy - Fatal编程技术网

Python:变量的副本

Python:变量的副本,python,variables,copy,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库时遇到了一个问题,在这个库中,我有一个存储在列表中的chec

有没有一种方法可以复制一个变量,这样当变量“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库时遇到了一个问题,在这个库中,我有一个存储在列表中的checkbutton,我正在尝试获取它所包含的变量

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


当checkbutton变量发生变化时,是否有一种保存该变量副本的方法?您询问是否可以创建对某个变量的引用并保存在另一个变量中。不,这是不可能的。请参见您正在探索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
现在,对于可变的对象,这变得非常有趣:

在这种情况下,
a
会发生变化,因为
b
a
引用了相同的对象。当我们对
b
进行更改时(我们可以这样做,因为它是可变的),同样的更改会出现在
a
上,因为它们是相同的对象

因此,要回答您的问题,您不能直接这样做,但如果您使用可变类型(如列表)来存储所携带的实际数据,您可以间接这样做



在使用Python代码时,理解这一点非常重要,而且这不是许多语言的工作方式,因此在真正理解它之前认真思考/研究这一点是值得的。

简而言之,使用简单的值赋值,您无法做到这一点。如你所见:

a=4
b=a
a=5

>>> print b
4
但是,对于列表等可变对象,您可以这样做。因此:

a=[1]
b=a
a.append(2)

>>> print a
[1,2]
>>> print b
[1,2]

根据您要执行的操作,您可能需要检查


这允许您拥有一个主对象,然后在主对象消失后,有几个副本将变为无。

通过临时列表创建简单变量的独立副本有一种难看的方法:

a = 6; 
b = [a][0]

你为什么要那样?只需使用
a
?See I cant的可能重复项。这是我在使用tkinter库时面临的一个问题,我有一个存储在列表中的checkbutton,我试图获取它所包含的变量,但需要大约5行代码才能到达该变量。我只是想要一种保存变量副本的方法,当checkbutton变量chagnes@Crispy:那就把这个作为你的问题。我们可以通过实际用例更好地帮助您解决实际问题。这个问题实在太模糊了。我来这里是想找到一种方法来防止第三种情况下的行为(要复制的对象是可变的)。如果其他人想要相同的信息,我最终发现,除了使用copy.copy或copy.deepcopy之外,您还可以使用以下语法来创建新对象并否定原始对象的可变性——当然,如果所需对象可以以这种方式实例化:
new_list=list(L)#copy new_dict=dict(olddict)#复制新#set=set(L)#将列表转换为set新#tuple=tuple(L)#将列表转换为tuple
a = 6; 
b = [a][0]