重头再来69 2021-04-08 23:11 采纳率: 100%
浏览 34
已采纳

关于python列表的列表的复制

请看以下两段代码:

第一段:

a = [[1,2,3],[5,6,7]]
b = a[:]
a[0]=8
print(a)
print(b)

结果是:

[8, [5, 6, 7]]
[[1, 2, 3], [5, 6, 7]]

第二段:

a = [[1,2,3],[5,6,7]]
b = a[:]
a[0][1]=8
print(a)
print(b)
print(id(a))
print(id(b))

结果为:

[[1, 8, 3], [5, 6, 7]]
[[1, 8, 3], [5, 6, 7]]
6075528
8860488

显然,第二段代码中,b也得到了硬拷贝,但为何其元素会跟着a变呢?

  • 写回答

1条回答 默认 最新

  • 天元浪子 优质创作者: python技术领域 2021-04-09 08:56
    关注

    b = a[:]相当于浅复制,对于列表元素为可变对象的情形,需要使用深复制。下面的代码中deepcopy就是深复制,如果将deepcopy改为copy,效果就会和b = a[:]相同,即浅复制。

    >>> import copy
    >>> a = [[1,2,3],[5,6,7]]
    >>> b = copy.deepcopy(a)
    >>> a[0][1] = 8
    >>> a
    [[1, 8, 3], [5, 6, 7]]
    >>> b
    [[1, 2, 3], [5, 6, 7]]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?