【问题标题】:python variables蟒蛇变量
【发布时间】:2011-05-01 02:11:13
【问题描述】:

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

【问题讨论】:

标签: python variables variable-assignment


【解决方案1】:

这里的重要区别是 mutableimmutable 数据类型。在 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]

由于l1l2 都指向同一个列表,因此当其中一个更改时,它们都会更改。

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

l2 = list(l1)

或者使用切片表示法:

l2 = l1[:]

【讨论】:

    【解决方案2】:

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

     cpy = mystr[:]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2010-10-21
      • 2016-05-28
      • 2014-08-01
      • 2021-06-28
      相关资源
      最近更新 更多