You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表元素复制疑问:为何修改B后输出为[5,4]?

问题解析

先一步步拆解代码的执行逻辑:

  1. 初始状态:A = [[1, 2], [3, 4]],此时A是包含两个独立列表的外层列表。
  2. A[0] = A[1]:这一步不是复制A[1]的内容,而是让A的第一个元素指向A[1]对应的列表对象。此时A变成[[3, 4], [3, 4]],注意这里两个元素其实是同一个列表的引用,修改其中一个会影响另一个。
  3. B = A[:][0]:你对这行的理解有误。A[:]是对A做浅拷贝,生成一个新的外层列表,但里面的元素还是原来的列表引用(也就是那两个指向同一对象的[3,4])。然后[0]是取这个新外层列表的第一个元素,也就是那个共享的[3,4]列表。所以B本质上和A[0]、A[1]指向的是同一个列表对象。
  4. B[0] = 5:因为B和A里的两个列表是同一个对象,修改B的第一个元素,会直接改变这个共享列表的内容,此时这个列表变成[5,4]。

所以最终打印时,A是[[5,4],[5,4]],B是[5,4]。

你之前误以为A[:][0]是按列取元素(取每一行的第0个组成新列表),但Python里没有这种直接的按列索引方式。如果要实现取每一行第0个元素组成[3,3],应该用列表推导式:B = [row[0] for row in A],这时候B是一个新列表,修改B的元素不会影响A。

内容的提问来源于stack exchange,提问作者shari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:20:27