MST

星途 面试题库

面试题:Python中复制列表的常见方式及区别

请列举Python中至少两种复制列表的方式,并说明它们在浅拷贝和深拷贝方面的区别。
35.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 使用切片操作(浅拷贝)
    • 示例代码:
    original_list = [1, 2, [3, 4]]
    new_list = original_list[:]
    
    • 浅拷贝特点:
      • 浅拷贝会创建一个新的列表对象,新列表中的顶层元素是原列表顶层元素的副本。
      • 对于列表中的可变对象(如列表中的子列表),浅拷贝只是复制了对象的引用,而不是对象本身。所以如果修改新列表中可变对象的内容,原列表中对应的可变对象也会改变。例如:
    original_list = [1, 2, [3, 4]]
    new_list = original_list[:]
    new_list[2][0] = 5
    print(original_list) 
    # 输出: [1, 2, [5, 4]]
    
  2. 使用list()函数(浅拷贝)
    • 示例代码:
    original_list = [1, 2, [3, 4]]
    new_list = list(original_list)
    
    • 浅拷贝特点:和切片操作类似,它也是浅拷贝。新列表是一个新的对象,顶层元素是副本,但对于列表中的可变对象,只是复制了引用。例如:
    original_list = [1, 2, [3, 4]]
    new_list = list(original_list)
    new_list[2][0] = 5
    print(original_list) 
    # 输出: [1, 2, [5, 4]]
    
  3. 使用copy模块的copy函数(浅拷贝)
    • 示例代码:
    import copy
    original_list = [1, 2, [3, 4]]
    new_list = copy.copy(original_list)
    
    • 浅拷贝特点:同样是浅拷贝,创建新列表对象,顶层元素为副本,可变子对象是引用。例如:
    import copy
    original_list = [1, 2, [3, 4]]
    new_list = copy.copy(original_list)
    new_list[2][0] = 5
    print(original_list) 
    # 输出: [1, 2, [5, 4]]
    
  4. 使用copy模块的deepcopy函数(深拷贝)
    • 示例代码:
    import copy
    original_list = [1, 2, [3, 4]]
    new_list = copy.deepcopy(original_list)
    
    • 深拷贝特点:
      • 深拷贝会递归地复制列表中的所有对象,包括可变对象。新列表和原列表完全独立,修改新列表中任何对象的内容,都不会影响原列表。例如:
    import copy
    original_list = [1, 2, [3, 4]]
    new_list = copy.deepcopy(original_list)
    new_list[2][0] = 5
    print(original_list) 
    # 输出: [1, 2, [3, 4]]