面试题答案
一键面试- 使用切片操作(浅拷贝):
- 示例代码:
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]]
- 使用
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]]
- 使用
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]]
- 使用
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]]