Python函数得到了2个列表,但只更改了1个

2024-09-28 17:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么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)

Tags: 方法inl1列表fordefprintdel
2条回答
L2 = L2 + [4]

重新分配L2的地址,使其与传入的列表不同。。。。至少这是一个简单的解释

您可以通过在赋值之前和之后打印id(L2)来看到这一点

如果你把它改成

L2.append(4)

那么它确实会改变Lista2

L2 = L2 + [4]此语句创建新变量

如果将此语句更改为L2.extend([4])L2 += [4],则它将更改L2的值,即[2, 3, 4]

在赋值前后打印idL2

>>> 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

相关问题 更多 >