跪求大佬解答一个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

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务