列表依赖性问题(python)

时间:2011-08-17 11:02:02

标签: python list

我确信这个问题在很久以前就得到了解答,但是英语不是我的母语而且我的搜索非常糟糕所以请原谅。 我正在尝试通过为我的工作编写数据库来学习python,所以我遇到了这个问题。 简化代码的和平:

    x=[[0,0],[0,0]]
    y=x[0:]
    y[0][0]="1"
    print x

和输出:

    [['1', 0], [0, 0]]

我明白我在这里缺少一些基本的东西,但为什么“x”和“y”一起改变了?所有答案都将不胜感激。

2 个答案:

答案 0 :(得分:3)

使用x[0:]不会创建“深层副本”;它本质上是复制对内部数组的引用,或者是“浅拷贝”,这样设置y[0]y[1]不会改变x,但是设置内部数组的项目会。 / p>

答案 1 :(得分:2)

y=x[0:] 

这会复制列表x,但由于x的元素是数组,因此这些元素将被复制为引用。你需要的是复制x的每个元素。例如:

y = [val[:] for val in x]

然后改变y不会影响x。

编辑:

另一种适用于更广泛案例的替代方案就像建议deepcopy一样。所以:

from copy import deepcopy

y = deepcopy(x)

这适用于嵌套列表和非可迭代元素。