python - Python列表副本 - 困惑
问题描述
Python初学者在这里。阅读有关列表引用、浅拷贝和深拷贝的文章,尝试了以下内容:
a = ['a', 'b', 'c']
b = list(a)
a[0] = 'A'
预期输出:
>>>a
['A', 'b', 'c']
>>>b
['A', 'b', 'c']
实际输出:
>>>a
['A', 'b', 'c']
>>>b
['a', 'b', 'c']
但是,它在以下情况下工作:
xs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> ys = list(xs) # Make a shallow copy
xs[1][0] = 'X'
>>> xs
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
>>> ys
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
如果我在这里遗漏了什么,有人可以解释一下吗?谢谢
Python 3.7.4
解决方案
那是因为list()
函数创建了一个新列表,如果您在分配后对原始列表进行更改,新列表将不会更改。
您可以使用变量值来做到这一点,但要小心,例如
var = 'a'
list1 = [var, 'a', 'b']
list2 = list1
print(list1)
print(list2)
输出:
['a', 'a', 'b']
['a', 'a', 'b']
您可以更改 的值,var
并且两个列表都会更改,除非您这样做:
var = 'a'
list1 = [var, 'a', 'b']
var = 'c'
list2 = list1
print(list1)
print(list2)
输出:
['a', 'a', 'b']
['a', 'a', 'b']
为什么?
因为当你确实list1=[var, 'a', 'b']
var
有值时'a'
,但是当你改变它的值时,这不会影响它,list1
因为它保存了它var
自己的值,所以list2
两者都没有
推荐阅读
- powerbi - Power Bi 将自定义行添加到矩阵以进行比较
- vba - MS Word 插件常量在启动期间具有不同的值 (AutoExec)
- vue.js - vue-apollo 组件间共享查询定义
- c++ - C ++逗号奇怪的数字行为
- java - 将手写笔记的图像转换为文本
- c++ - 带有 5 个参数的 WPARAM
- spring-boot - /graphql 端点在 spring 云应用程序的集成测试期间返回 404 错误,但不是通过使用 mvn spring-boot:run 运行应用程序
- sql - Postgres Distinct 或 Group by
- html - 更改兄弟元素的 CSS
- python - 强密码检查器