我有一个简单的问题。我从文件中读取了一个字符串,并将其存储在一个列表中(名为:formula)。然后,我将(公式)存储在另一个变量(fstore =公式)中,以备以后使用。然后我对公式进行了更改,事实证明,fstore也在更改。为什么这种情况总是发生呢?我希望fstore保持不变。我没有在程序中的其他地方使用fstore。我的赋值(fstore =公式)是错误的吗?
杰伦
发布于 2011-05-01 10:36:17
这里重要的区别是可变数据类型和不可变数据类型。在python中,列表是可变的,而元组是不可变的。这意味着当您像这样“更改”元组的值时:
t1 = (1, 2, 3) # t1 points to (1, 2, 3)
t2 = t1 # t2 points to the same tuple as t1
t1 = (2, 3, 4) # t1 points to a new tuple (2, 3, 4)实际上,您正在创建一个全新的元组,并将t1指定为指向该新元组。t2仍然指向旧的元组,这是不能改变的,因为元组是不可变的。简而言之,如果您将一个不可变值赋给一个变量,则可以假定该值永远不会改变--除非您显式地为该变量赋了一个新值。
但是,当您更改列表的值时,实际上是更改了列表本身:
l1 = [1, 2, 3] # l1 points to [1, 2, 3]
l2 = l1 # l2 points to the same list as l1
l1[0] = 5 # now [1, 2, 3] becomes [5, 2, 3]因为l1和l2都指向同一个列表,所以当其中一个发生变化时,它们都会发生变化。
要创建一个在l1更改时不会更改的副本,只需使用list
l2 = list(l1)或者使用切片表示法:
l2 = l1[:]发布于 2011-05-01 10:13:16
请记住,Python中的这些名称不是变量,它们是对变量的引用。所以你最终得到了一个商店的两个别名。查看一下复制模块,或使用以下命令:
cpy = mystr[:]https://stackoverflow.com/questions/5845935
复制相似问题