python - 列表插入用最新的插入子列表替换所有子列表
问题描述
y=[]
x[0]=1
x[1]=2
y.insert(len(y),x)
x[0]=3
x[1]=4
y.insert(len(y),x)
y
[[3,4],[3,4]]
上面的代码是在 python shell 解释器上测试的,我的问题,为什么 y.insert(len(y),x) 行用最新的子列表 x 内容替换 y 的所有子列表?这显然不是插入内容变化的子列表的正确方法,那么正确的方法是什么?
解决方案
发生这种情况是因为y[0]
和y[1]
指的是相同的元素x
。即使您更改了x
aftery
的第一次插入的内容,它仍然指的是x
. 您可以清楚地理解,如果您y
在第一次插入之后立即打印值。您还可以打印 的第一个和第二个元素的y
id,id 将相同。下面使用:
print(id(y[0]), id(y[1]))
要达到您的要求,您需要插入如下:
y.insert(len(y),list(x))
使用list(x)
将创建一个新的和新鲜的数据。
推荐阅读
- installation - 如何正确安装 umbraco 7.10 或 8 卡在 db 配置上
- symfony - 如何从数据库中获取电子邮件参数
- python - 在 python 中解析 json 文件会产生困难
- python - 格式化字符串的所有行(即使 \n 在字符串中)
- ansible - 找到一个准确的字符串
- javascript - 无法使用 FlotJs 绘制 2 个单独的图表
- ruby-on-rails - 未定义的方法 `ceo_name=' for #
- javascript - 谷歌地图在单选按钮选择上更改 JSON 覆盖的填充颜色
- c# - 选择要从中选择的资产时过滤到特定文件夹
- javascript - 如何在控制器内格式化 $scope.datenow?