python - 为什么此代码仅更改列表的某些元素而不更改其他元素?
问题描述
我不明白为什么以下代码的结果是[1,[2,5]]
而不是[3,[2,5]]
。为什么子列表中的元素发生了变化,而子列表之外的元素却没有?
我是 Python 新手,所以也许我看不到应该很明显的东西。我读过关于深拷贝和浅拷贝的文章,但没有帮助。
a = [1,[2,3]]
b = a[:]
a[0] = 3
a[1][1] = 5
print(b)
我在第 2 行创建了列表切片。但由于它没有开始或结束值,切片等于整个列表,对吧?那么为什么 3 变成了 5,而 1 却保持不变呢?
解决方案
因为,在 Python 中,每个列表都是一个独立的对象。您可以使用“复制”模块进行深度复制来解决这个特定问题。
import copy
a = [1,[2,3]]
b = copy.deepcopy(a)
a[0] = 3
a[1][1] = 5
print(b)
结果:[1, [2, 3]]
推荐阅读
- wso2 - WSO2 获取自定义错误消息和代码
- visual-studio - 在 VS 中使用双屏开发 Blazor Razor 组件
- java - 事件通知是否适用于现在处于无效状态的过期信封?
- alfresco - Alfresco nodeRef 的 Javascript API
- parallel-processing - zlib 中的函数 compress() / compress2() 是否可以在不破坏串行 inflate() 的情况下并行化
- python - Mac OS 上的 Tkinter 文本框滚动问题
- javascript - 如何使用 jquery unobtrusive 和 Asp.Net Mvc 验证动态生成的单选按钮组?
- mysql - 如何在 AWS 的 Aurora MySQL 数据库中将写入和读取端点更改为只读?
- yocto - 无法在 yocto 上使用 root 用户登录为 beagle bone black 构建映像
- c# - 使用 GDI 缩放时 C# WinForms UserControls 和标签模糊