python变量

Jay*_*Jay 1 python variables variable-assignment

我有一个简单的问题.我从文件中读取一个字符串并存储在一个列表中(名为:formula).然后我将(公式)存储在另一个变量(fstore = formula)中以便以后保存.然后我对公式进行了修改,事实证明,fstore也在改变.为什么会这种情况继续发生?我希望fstore保持不变.我没有在程序中的任何其他地方使用fstore.我的作业(fstore =公式)错了吗?

松鸦

sen*_*rle 5

这里的重要区别在于可变数据类型和不可变数据类型.在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)
Run Code Online (Sandbox Code Playgroud)

你实际上正在创建一个全新的元组并指定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]
Run Code Online (Sandbox Code Playgroud)

由于l1并且l2两者都指向同一个列表,因此当它们中的一个发生变化时它们都会发生变

要制作一个在更改时不会更改的副本l1,只需使用list:

l2 = list(l1)
Run Code Online (Sandbox Code Playgroud)

或使用切片表示法:

l2 = l1[:]
Run Code Online (Sandbox Code Playgroud)