python中嵌套列表的值发生了改变

list1=[[1, 4], [1, 10], [1, 4], [2, 7], [4, 5]]
list2=[list1[0]]
print("list1:"+str(list1))
print('list2:'+str(list2))
for l in list1:
    list2[-1][1]=l[1]
print("list1:"+str(list1))
print('list2:'+str(list2))
list1:[[1, 4], [1, 10], [1, 4], [2, 7], [4, 5]]
list2:[[1, 4]]
list1:[[1, 5], [1, 10], [1, 4], [2, 7], [4, 5]]
list2:[[1, 5]]

Process finished with exit code 0

第一段是代码,第二段是结果,本来只是把list1的列表元素中的的第二个值赋给list2,但是list1的值发生了改变,请教下各位是啥原因?我一时半会找不到原因

正常啊 这是传递的引用 浅拷贝。也就是说,list2不会重新在内存中申请对象。

list2 并没有重新生成 字典序。

而是list1的一些符合要求的别名。

首先你要知道,列表内的每个元素都相当于是一个单独变量,下面用变量来解释会好理解一些。

 

列表是按地址传递的。

当把一个列表从一个变量传递到另一个变量中时,两个变量都指向这同一个列表的地址。

 

a=[1,2];

b=a #a和b变量都指向同一个列表的地址。

print(id(a),id(b)) #两个变量指向同一个地址

 

当对列表的属性赋值时,实际上是先读取变量中的地址找到列表,再改变这个列表的属性。

这样之后再用另一个变量中的地址所找到的也是这同一个列表,会获取到一样的列表内容。

 

b[1]=3;

print(b[1]) #输出 3

print(a[1]) #输出 3

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632