【问题标题】:LIST and TUPLE assignment operationLIST 和 TUPLE 赋值操作
【发布时间】:2018-10-22 16:43:34
【问题描述】:

为什么在示例 II 中只更改了元组,而在示例 I 中两个列表都更改了?请考虑这两个程序及其各自的输出(I 和 II)。

L1 = [1,2,3,4]
L2 = L1
L2.append(5)
print("L1: ", L1)
print("L2: ", L2)

输出: L1:[1,2,3,4,5] L2:[1,2,3,4,5]

L1=(1,2,3,4)
L2=L1
L2 += (5,)
print("L1: ", L1)
print("L2: ", L2)

输出: L1: (1,2,3,4) L2: (1,2,3,4,5)

【问题讨论】:

  • 因为元组是不可变的。您不是更改两个变量指向的元组,而是创建一个新元组并将其分配给L2

标签: python python-3.x list tuples


【解决方案1】:

在第一个示例中,L1 和 L2 都指向存储的数据,因此如果您更改 L1 或 L2 中的任何一个,数据会更改,并且通过调用(不确定正确的表达式)L1 或 L2 中的任何一个,新的更改将显示数据。这种解释适用于列表。列表是可变的。 在第二个示例中,您使用的是不可变的元组。当你想改变一个不可变的元组时,python 会自动创建一个新的元组。这意味着当您将 5 添加到元组 L2 时,实际上 5 并没有与原始元组相加,python 会创建一个名为 L2 的新元组,并将新数据 (5) 添加到其中,而原始数据 (L1) 仍然存在不变。这就是为什么 L1 没有改变而 L2 改变的原因。

【讨论】:

    【解决方案2】:

    a = b 使a 引用与b 相同的对象。但是元组是不可变的,所以+= 创建一个 new 元组,而原始元组保持不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 2020-04-16
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多