Python中列表的内存管理

2024-04-20 13:50:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法理解python中的以下行为:

x = [0, [1,2,3,4,5],[6]]
y = list(x)
y[0] = 10
y[2][0] = 7
print x
print y

它输出:

[0, [1, 2, 3, 4, 5], [7]]
[10, [1, 2, 3, 4, 5], [7]]

为什么更新了x和y的第二个索引而只更新了y的第一个索引?你知道吗


Tags: listprint
2条回答

在Python中,序列分为可变序列和不可变序列,可变序列在创建后可以更改顺序。用于不可变序列(字符串、Unicode、元组),Python为为了他们可变序列(列表、字节数组),Python为它们提供了一个引用。你知道吗

所以如果你改变x,y也会改变,因为它们引用了同一个列表。你知道吗

The standard type hierarchy

这是因为list(x)创建了列表x副本。x中的一些元素本身就是列表。不会为它们创建副本;而是将它们作为引用传递。以这种方式,xy最终会有一个与元素相同的列表引用。你知道吗

如果要创建x的深度副本(即同时复制子列表),请使用:

import copy
y = copy.deepcopy(x)

相关问题 更多 >