首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python列表复制-混乱

Python列表复制-混乱
EN

Stack Overflow用户
提问于 2019-08-04 07:05:23
回答 5查看 95关注 0票数 2

Python初学者在这里。阅读关于列表引用、浅拷贝和深拷贝的文章时,尝试了以下几点:

代码语言:javascript
运行
复制
a = ['a', 'b', 'c']
b = list(a)
a[0] = 'A'

预期输出:

代码语言:javascript
运行
复制
>>>a
['A', 'b', 'c']
>>>b
['A', 'b', 'c']

实际输出:

代码语言:javascript
运行
复制
>>>a
['A', 'b', 'c']
>>>b
['a', 'b', 'c']

但是,它在以下情况下有效:

代码语言:javascript
运行
复制
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

文章链接:https://realpython.com/copying-python-objects/

EN

回答 5

Stack Overflow用户

发布于 2019-08-04 07:38:51

这是因为list()函数生成了一个新列表,如果您在赋值之后对原始列表进行了更改,则新列表不会更改。

您可以使用变量值执行此操作,但要小心,例如

代码语言:javascript
运行
复制
var = 'a'
list1 = [var, 'a', 'b']
list2 = list1

print(list1)
print(list2)

输出:

代码语言:javascript
运行
复制
['a', 'a', 'b']
['a', 'a', 'b']

您可以更改var的值,除非您执行以下操作,否则两个列表都将更改:

代码语言:javascript
运行
复制
var = 'a'
list1 = [var, 'a', 'b']
var = 'c'
list2 = list1

print(list1)
print(list2)

输出:

代码语言:javascript
运行
复制
['a', 'a', 'b']
['a', 'a', 'b']

为什么?因为当您执行此操作时,list1=[var, 'a', 'b'] var的值为'a',但是当您更改其值时,这不会影响list1,因为它保存了var本身的值,因此list2也不会

票数 2
EN

Stack Overflow用户

发布于 2019-08-04 07:07:22

list()会创建一个新列表,这意味着对原始列表的更改不会影响新列表。

票数 1
EN

Stack Overflow用户

发布于 2019-08-04 07:13:06

当您说b = list(a)时,您正在创建一个新的列表b,它的值与a中的值相同。在这一点上,每个列表的元素是相等的,但它们不是相同的对象。也就是说,其中一个对象的更改不会反映在另一个对象中。它们是独立的。

如果您说b = a,则表示ba是引用同一对象的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57342656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档