Python 列表和元组分配操作

Python 列表和元组分配操作,python,python-3.x,list,tuples,Python,Python 3.x,List,Tuples,为什么在示例II中只有元组更改,而在示例I中两个列表都更改了?请考虑这两个程序和它们各自的输出(I和II)。< /P> I L1 = [1,2,3,4] L2 = L1 L2.append(5) print("L1: ", L1) print("L2: ", L2) L1=(1,2,3,4) L2=L1 L2 += (5,) print("L1: ", L1) print("L2: ", L2) 输出: L1:[1,2,3,4,5] L2:[1,2,3,4,5] II L1 = [1,2,3

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

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

II

L1 = [1,2,3,4]
L2 = L1
L2.append(5)
print("L1: ", L1)
print("L2: ", L2)
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)

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

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

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