Python 函数得到了 2 个列表,但只改变了 1 个
Python function got 2 lists but only changes 1
为什么 Lista1 变了而 Lista2 没有?哪些方法直接改变列表?
def altera(L1, L2):
for elemento in L2:
L1.append(elemento)
L2 = L2 + [4]
L1[1]= 10
del L2[0]
return L2[:]
Lista1 = [1, 2, 3]
Lista2 = [1, 2, 3]
Lista3 = altera(Lista1, Lista2)
print(Lista1)
print(Lista2)
print(Lista3)
L2 = L2 + [4]
重新分配 L2 的地址,因此它是一个不同于传入的列表....这至少是简单的解释
你可以通过在赋值之前和之后打印 id(L2)
来看到这一点
如果您将其更改为
L2.append(4)
那确实会变Lista2
L2 = L2 + [4]
该语句创建新变量。
如果您将此语句更改为 L2.extend([4])
或 L2 += [4]
,那么它将更改 L2
的值,即 [2, 3, 4]
在赋值前后打印 L2
的 id
。
>>> L2 = [1,2,3]
>>> id(L2)
3072769420L # ID of L2
>>> L2 += [4]
>>> id(L2)
3072769420L # Same ID of L2
>>> L2
[1, 2, 3, 4]
>>> L2 = L2+[5]
>>> id(L2)
142773548 # New variable which name is L2
为什么 Lista1 变了而 Lista2 没有?哪些方法直接改变列表?
def altera(L1, L2):
for elemento in L2:
L1.append(elemento)
L2 = L2 + [4]
L1[1]= 10
del L2[0]
return L2[:]
Lista1 = [1, 2, 3]
Lista2 = [1, 2, 3]
Lista3 = altera(Lista1, Lista2)
print(Lista1)
print(Lista2)
print(Lista3)
L2 = L2 + [4]
重新分配 L2 的地址,因此它是一个不同于传入的列表....这至少是简单的解释
你可以通过在赋值之前和之后打印 id(L2)
来看到这一点
如果您将其更改为
L2.append(4)
那确实会变Lista2
L2 = L2 + [4]
该语句创建新变量。
如果您将此语句更改为 L2.extend([4])
或 L2 += [4]
,那么它将更改 L2
的值,即 [2, 3, 4]
在赋值前后打印 L2
的 id
。
>>> L2 = [1,2,3]
>>> id(L2)
3072769420L # ID of L2
>>> L2 += [4]
>>> id(L2)
3072769420L # Same ID of L2
>>> L2
[1, 2, 3, 4]
>>> L2 = L2+[5]
>>> id(L2)
142773548 # New variable which name is L2