Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数得到了2个列表,但只更改了1个_Python_List_Methods_Mutability - Fatal编程技术网

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

Python函数得到了2个列表,但只更改了1个,python,list,methods,mutability,Python,List,Methods,Mutability,为什么列表A1被更改,而列表A2没有更改?哪些方法可以直接更改列表 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(Li

为什么列表A1被更改,而列表A2没有更改?哪些方法可以直接更改列表

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的地址,使其与传入的列表不同。。。。至少这是一个简单的解释

您可以通过在分配之前和之后打印
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

你到底想做什么?只是想知道为什么,已经回答:)所以
L2=L2+[4]
!=<代码>L2+=[2]?没错。如果这是所有解决方案中最好的,可能会有争议,但事实就是如此。
L2=L2+[4]!=L2+=[4]
:两种情况下的
L2
值相同。但是在
L2=L2+[4]
语句中,创建了新的
L2
变量,在
L2+=[4]
语句中,更新了
L2
的值。
>>> 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