面试常问问题——python中
列表和元组的相同点和区别
不同点:
1、列表可以被修改,元组定义完成后不可以被修改
2、元组不可以被修改,但如果是元组里嵌套了一个list,list可以被修改
相同点:
1、可以容纳多个元素
2、可以完成元素混装,容纳多个类型的元素
3、数据是有序存储
4、允许重复数据存在
5、支持for循环
深拷贝和浅拷贝的区别
浅拷贝:
-
只复制 对象的顶层元素,嵌套对象仍然是 引用(共享内存)。
-
修改 嵌套对象 会影响原对象
-
import copy
original = [[1, 2, 3], [4, 5, 6]]
shallow_copied = copy.copy(original) # 浅拷贝# 修改顶层元素(不影响原对象)
shallow_copied[0] = [7, 8, 9]
print(original) # 输出 [[1, 2, 3], [4, 5, 6]](未改变)
print(shallow_copied) # 输出 [[7, 8, 9], [4, 5, 6]]# 修改嵌套元素(会影响原对象!)
shallow_copied[1][0] = 99
print(original) # 输出 [[1, 2, 3], [99, 5, 6]](原对象被修改)
print(shallow_copied) # 输出 [[7, 8, 9], [99, 5, 6]]
-
修改
shallow_copied[0]
(顶层)不影响original
。 -
修改
shallow_copied[1][0]
(嵌套)会影响original
,因为它们 共享嵌套列表的引用。
深拷贝
-
递归复制所有层级的对象,新旧对象 完全独立。
-
修改 任意层级 都不会影响原对象。
-
import copy
original = [[1, 2, 3], [4, 5, 6]]
deep_copied = copy.deepcopy(original) # 深拷贝# 修改嵌套元素(不影响原对象)
deep_copied[1][0] = 99
print(original) # 输出 [[1, 2, 3], [4, 5, 6]](原对象不变)
print(deep_copied) # 输出 [[1, 2, 3], [99, 5, 6]] deep_copied
是一个全新的对象,所有层级的数据都被复制,修改不会影响original
。