Python中列表切片生成的对象是浅拷贝还是深拷贝?
切片操作的拷贝类型问题
示例代码
Lst1 = [1,2,3,4] Lst2 = Lst1 Lst3 = Lst1[0:2] Lst4 = Lst1[:]
已知情况:
- Lst1与Lst2指向同一个列表(直接赋值属于引用传递,未创建新列表)
- Lst3是Lst1的切片结果
- Lst4也是Lst1的切片结果
问题解答
Lst3和Lst4都是通过浅拷贝得到的新列表。
切片操作(无论是指定范围的[0:2]还是全量的[:])会创建一个新的列表容器,但新列表中的元素只是原列表元素的引用。对于示例中仅包含不可变元素(整数)的一维列表,浅拷贝的表现和深拷贝类似——修改新列表的元素不会影响原列表。但如果原列表包含可变对象(比如子列表、字典等),就能体现出浅拷贝的本质:
original = [1, [2, 3]] shallow_copy = original[:] # 修改浅拷贝里的可变子对象 shallow_copy[1].append(4) print(original) # 输出 [1, [2, 3, 4]],原列表的子列表被同步修改
这是因为浅拷贝仅复制最外层的列表结构,内部的可变元素仍然和原列表共享引用。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

