【Python】[List][append][insert]神奇的联动机制

从菜鸟教程上看来的,本地实验了一把:

>>> a=[[0,1],[1,2],[2,3]]
>>> a.insert(2,a[1])
>>> a.append(a[3])
>>> print (a)
[[0, 1], [1, 2], [1, 2], [2, 3], [2, 3]]

增_元素:list.insert(INDEX, "{ELEMENT_NAME}")

在列表指定位置添加新的对象

增_元素:list.append(“{ELEMENT_NAME}”)

在列表末尾添加新的对象

然后进行打印:

可以看到,最后的输出,符合预期;

 

用 id() 函数查看内存地址:

id(a[1])==id(a[2]) #True
id(a[3])==id(a[4]) #True

 

所谓的联动:

>>> a[1][1]=0
>>> a[4][1]=4
>>> print(a)
[[0, 1], [1, 0], [1, 0], [2, 4], [2, 4]]
>>>

可以看到:

a[1][1]和a[2][1]都发生了改变;

a[3][1]和a[4][1]都发生了改变;

其中:

a[2]是从a[1]来的;

a[4]是从a[3]来的;

如果想只修改其中一个元素(子列表),必须把该子列表完整定义一遍,如在上述代码后增加:

a[1]=[1,1]
print(a)

则输出为:

[[0,1],[1,1],[1,0],[2,4],[2,4]]

此后再修改子元素,不会发生联动:

a[1][1]=5
print(a)

输出为:

[[0,1],[1,5],[1,0],[2,4],[2,4]]

用 id() 函数再次查看内存地址

id(a[1])==id(a[2]) #False
posted @   MoKin_Li  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示