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]]
通过这个例子,我们可以清楚地看到浅拷贝和深拷贝之间的区别。
Python对象的浅拷贝和深拷贝需要引入copy模块,注意它两的区别以及和赋值的区别
下面的例子可以较清楚看出三者的区别
#!/usr/bin/python# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
输出:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
本文共计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]]
通过这个例子,我们可以清楚地看到浅拷贝和深拷贝之间的区别。
Python对象的浅拷贝和深拷贝需要引入copy模块,注意它两的区别以及和赋值的区别
下面的例子可以较清楚看出三者的区别
#!/usr/bin/python# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
输出:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]

