跪求大佬解答一个python编程过程中的小问题。。

以下是我运行的代码,就是搞不明白为什么赋值a=[[]]*3之后,再运行a[1].append(3),最后结果是a的所有元素都加了3?
>>> a=[[]]*3
>>> a
[[], [], []]
>>> a[1].append(3)
>>> a
[[3], [3], [3]]
#Python#
全部评论
&深拷贝和浅拷贝的问题~我也挺久没用python了,应该就是这个原因
3 回复 分享
发布于 2020-04-04 17:53
[[] for _ in range(3)]
1 回复 分享
发布于 2020-04-05 20:45
这个知识点是深浅拷贝的问题列表使用的同一个空间 也就是同一个内存地址,当第一个列表内添加值时,其他两个列表内也会产生相同的值.
1 回复 分享
发布于 2020-07-27 18:05
*3操作会使得内部元素指向同一片内存,只有对单个内部元素进行赋值才会改变该指针指向。
点赞 回复 分享
发布于 2020-04-04 18:00
根据你说的,我试着用数字试了一下,然后发现这样的有趣现象。 然后我做个猜想哈,就是你本身定义的a是由三个空数组组成的,接着在a之中为其中的一个子数组添加元素,先执行append,然后才执行的是乘以3 操作;如果直接往a数组添加元素,那么就是按照我们预想的得出新的数组a。 如果想要往第0个数组之中添加元素,不写 *3,a[0].append(3),直接append是可以的哦 只是根据结果猜想一下,有误谅解,如果你知道其中原理,欢迎讨论哦~
点赞 回复 分享
发布于 2020-04-04 19:25
浅拷贝和深拷贝了解下    为了避免这种 t = [[(k - 1) * 4 + i for i in range(1, 5)] for k in range(1, 5)]  这样就输出了一个4行4列矩阵
点赞 回复 分享
发布于 2020-04-10 23:33
浅拷贝,指向的是同一个内存地址 深浅拷贝:https://www.cnblogs.com/songhaixing/p/14015669.html
点赞 回复 分享
发布于 2020-11-25 09:26

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务