my_list = [0] * 3
my_list[0] = 1

输出到

my_2ndlist = [[0] * 3] * 3
my_2ndlist[1][1] = 5

输出到

我想我知道

有什么解释能帮我更好地理解吗?非常感谢.

推荐答案

当你打印my_list[0], my_list[1], my_2ndlist[0], my_2ndlist[1]个地址时,你会看到my_list[0], my_list[1]有两个不同的地址,my_2ndlist[0], my_2ndlist[1]有相同的地址.

my_list = [0] * 3
my_list[0] = 1
print(my_list)
print(id(my_list[0]), id(my_list[1]))

my_2ndlist = [[0] * 3] * 3
my_2ndlist[1][1] = 5
print(my_2ndlist)
print(id(my_2ndlist[0]), id(my_2ndlist[1]))

这是因为[0] * 3将复制一个值为零的整数对象3次.在python中,当复制基元类型的对象时,它们会被深度复制(integer是基元类型).但是,[[0] * 3] * 3这将复制列表[0, 0, 0] 3次.列表不是基元类型的对象,因此它们是浅复制的.也许this link会帮助你理解.

Python相关问答推荐

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

如何为需要初始化的具体类实现依赖反转和接口分离?

Pandas:计数器的滚动和,复位

操作布尔值的Series时出现索引问题

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

来自任务调度程序的作为系统的Python文件

Python:在cmd中添加参数时的语法

迭代工具组合不会输出大于3的序列

ValueError:必须在Pandas 中生成聚合值

如何在保持sibling 姐妹美汤的同时插入和删除标签?

Python-迭代PANAS中的数据框并替换列表中不包含字符串的值

收到Firebase推送通知时,电话不会震动

当使用随机均匀(a,b)时,b是包含的还是排他的?

在记录器模块中设置两个不同的调试级别

提供不正确结果的Python IP验证

Django中带有ForeignKey的抽象模型无法按预期继承

如何使用Pandas在Excel中有条件地设置单个单元格的格式?

用于将Custom TypeAlias替换为NotRequired的典型插件

如果没有强制转换Numy数组,则通过ctype将Numy数组传递给C函数会产生错误的结果