Python中如何区分浅拷贝与深拷贝的区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计518个文字,预计阅读时间需要3分钟。
Python对象的浅拷贝和深拷贝需要引入copy模块,注意它们之间的区别以及赋值的区别。下面可以更清晰地看出三者之间的区别:
浅拷贝:- 创建一个新对象,但新对象中的可变对象(如列表、字典等)只是原对象中对应可变对象的引用。- 修改原对象中的可变对象,拷贝对象中的相应部分也会改变。
深拷贝:- 创建一个新对象及其所有子对象,完全复制原对象及其所有子对象的内容。- 修改原对象或其子对象,拷贝对象及其子对象不会受到影响。
赋值:- 直接赋值只是创建一个新的引用,原对象和赋值对象指向同一内存地址。- 修改原对象,赋值对象也会改变。
例子:
pythonimport copy
original_list=[1, 2, [3, 4]]shallow_copy=copy.copy(original_list)deep_copy=copy.deepcopy(original_list)
original_list[2][0]=5
print(Original List:, original_list) # [1, 2, [5, 4]]print(Shallow Copy:, shallow_copy) # [1, 2, [5, 4]]print(Deep Copy:, deep_copy) # [1, 2, [3, 4]]
通过这个例子,我们可以清楚地看到浅拷贝和深拷贝之间的区别。
本文共计518个文字,预计阅读时间需要3分钟。
Python对象的浅拷贝和深拷贝需要引入copy模块,注意它们之间的区别以及赋值的区别。下面可以更清晰地看出三者之间的区别:
浅拷贝:- 创建一个新对象,但新对象中的可变对象(如列表、字典等)只是原对象中对应可变对象的引用。- 修改原对象中的可变对象,拷贝对象中的相应部分也会改变。
深拷贝:- 创建一个新对象及其所有子对象,完全复制原对象及其所有子对象的内容。- 修改原对象或其子对象,拷贝对象及其子对象不会受到影响。
赋值:- 直接赋值只是创建一个新的引用,原对象和赋值对象指向同一内存地址。- 修改原对象,赋值对象也会改变。
例子:
pythonimport copy
original_list=[1, 2, [3, 4]]shallow_copy=copy.copy(original_list)deep_copy=copy.deepcopy(original_list)
original_list[2][0]=5
print(Original List:, original_list) # [1, 2, [5, 4]]print(Shallow Copy:, shallow_copy) # [1, 2, [5, 4]]print(Deep Copy:, deep_copy) # [1, 2, [3, 4]]
通过这个例子,我们可以清楚地看到浅拷贝和深拷贝之间的区别。

