首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python变量

python变量
EN

Stack Overflow用户
提问于 2011-05-01 10:11:13
回答 2查看 263关注 0票数 1

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

杰伦

EN

回答 2

Stack Overflow用户

发布于 2011-05-01 10:36:17

这里重要的区别是可变数据类型和不可变数据类型。在python中,列表是可变的,而元组是不可变的。这意味着当您像这样“更改”元组的值时:

代码语言:javascript
复制
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仍然指向旧的元组,这是不能改变的,因为元组是不可变的。简而言之,如果您将一个不可变值赋给一个变量,则可以假定该值永远不会改变--除非您显式地为该变量赋了一个新值。

但是,当您更改列表的值时,实际上是更改了列表本身:

代码语言:javascript
复制
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]

因为l1l2都指向同一个列表,所以当其中一个发生变化时,它们都会发生变化。

要创建一个在l1更改时不会更改的副本,只需使用list

代码语言:javascript
复制
l2 = list(l1)

或者使用切片表示法:

代码语言:javascript
复制
l2 = l1[:]
票数 5
EN

Stack Overflow用户

发布于 2011-05-01 10:13:16

请记住,Python中的这些名称不是变量,它们是对变量的引用。所以你最终得到了一个商店的两个别名。查看一下复制模块,或使用以下命令:

代码语言:javascript
复制
 cpy = mystr[:]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5845935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档