重头再来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]]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c语言#的问题:求完整代码条件好说
  • ¥100 HALCON DELPHI
  • ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
  • ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)
  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA