MST

星途 面试题库

面试题:Python列表复制在复杂数据结构下的行为

假设有一个列表,其中包含列表、字典等复杂数据结构,如 `a = [[1, 2], {'key': 'value'}]`,使用不同的复制方式(如切片、`copy` 模块的 `copy` 和 `deepcopy` 方法)对其进行复制,然后修改复制后的列表中的某个元素,观察原始列表的变化情况,并解释原因。
26.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 切片复制
    • 代码示例:
a = [[1, 2], {'key': 'value'}]
b = a[:]
b[0][0] = 10
print(a)
  • 输出结果:[[10, 2], {'key': 'value'}]
  • 原因解释:切片复制是浅拷贝,它只复制了外层列表,而内层的列表和字典等复杂数据结构仍然是引用。所以当修改b中内层列表的元素时,a中的内层列表也会跟着改变,因为它们指向同一个内存地址。
  1. copy模块的copy方法(浅拷贝)
    • 代码示例:
import copy
a = [[1, 2], {'key': 'value'}]
b = copy.copy(a)
b[0][0] = 10
print(a)
  • 输出结果:[[10, 2], {'key': 'value'}]
  • 原因解释:copy.copy也是浅拷贝,同样只复制了外层列表,内层的复杂数据结构是引用。所以修改b中内层列表的元素,a中内层列表也会改变。
  1. copy模块的deepcopy方法(深拷贝)
    • 代码示例:
import copy
a = [[1, 2], {'key': 'value'}]
b = copy.deepcopy(a)
b[0][0] = 10
print(a)
  • 输出结果:[[1, 2], {'key': 'value'}]
  • 原因解释:copy.deepcopy是深拷贝,它会递归地复制所有层次的嵌套数据结构。所以ba是完全独立的,修改b中内层列表的元素不会影响到a