Python中浅拷贝和深拷贝的区别究竟在何处,导致它们对对象的影响如此迥异?

2026-04-19 22:112阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计868个文字,预计阅读时间需要4分钟。

Python中浅拷贝和深拷贝的区别究竟在何处,导致它们对对象的影响如此迥异?

关于浅拷贝和深拷贝的讨论在学习和面试中经常遇到,这也是面试中常见的问题。以下是对浅拷贝和深拷贝关系的简要整理,并通过一个例子进行说明。

浅拷贝与深拷贝的关系:

浅拷贝:复制对象时,只复制对象本身,不复制对象内部的引用类型。如果对象内部有引用类型,那么拷贝后的对象和原对象将共享这部分引用。

深拷贝:复制对象时,不仅复制对象本身,还复制对象内部的引用类型。拷贝后的对象和原对象完全独立,互不影响。

例子:

pythonimport copy

定义一个包含列表的字典original={'a': [1, 2, 3], 'b': [4, 5, 6]}

浅拷贝shallow_copy=copy.copy(original)深拷贝deep_copy=copy.deepcopy(original)

修改浅拷贝中的列表shallow_copy['a'][0]=10

浅拷贝和原对象的'a'键对应的列表共享print(original['a']) # 输出: [10, 2, 3]

修改深拷贝中的列表deep_copy['a'][0]=20

深拷贝和原对象的'a'键对应的列表不共享print(original['a']) # 输出: [1, 2, 3]

Python中浅拷贝和深拷贝的区别究竟在何处,导致它们对对象的影响如此迥异?

通过这个例子,我们可以看到浅拷贝和深拷贝的区别。在处理复杂对象时,选择合适的拷贝方式非常重要。

关于浅拷贝和深拷贝想必大家在学习中遇到很多次,这也是面试中常常被问到的问题,借由这个时间,整理一下浅拷贝和深拷贝的关系

先从一个简单的例子入手吧 定义一个数组的嵌套结构

a = [1,2,3,[4,5,[6]]]

看一下它的gable frame

当我们做一下浅拷贝copy()时,global frame

a = [1,2,3,[4,5,[6]]] //浅拷贝 b = a.copy()

可以看到,浅拷贝对浅层的数组进行了复制,但深层的引用仍然是指向了原来的引用,这样就会在操作b数组时,会对原来的数组产生修改。

深拷贝

import copy a = [1,2,3,[4,5,[6]]] //浅拷贝 b = a.copy() //深拷贝 c = copy.deepcopy(a)

可以看到,深拷贝将其内部引用也进行了拷贝,在进行数据操作时是完全使用新数组,对原来的数组不产生影响。

  • 浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
  • 深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,

使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。

到此这篇关于图解Python中浅拷贝copy()和深拷贝deepcopy()的区别的文章就介绍到这了,更多相关Python浅拷贝copy()和深拷贝deepcopy()内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计868个文字,预计阅读时间需要4分钟。

Python中浅拷贝和深拷贝的区别究竟在何处,导致它们对对象的影响如此迥异?

关于浅拷贝和深拷贝的讨论在学习和面试中经常遇到,这也是面试中常见的问题。以下是对浅拷贝和深拷贝关系的简要整理,并通过一个例子进行说明。

浅拷贝与深拷贝的关系:

浅拷贝:复制对象时,只复制对象本身,不复制对象内部的引用类型。如果对象内部有引用类型,那么拷贝后的对象和原对象将共享这部分引用。

深拷贝:复制对象时,不仅复制对象本身,还复制对象内部的引用类型。拷贝后的对象和原对象完全独立,互不影响。

例子:

pythonimport copy

定义一个包含列表的字典original={'a': [1, 2, 3], 'b': [4, 5, 6]}

浅拷贝shallow_copy=copy.copy(original)深拷贝deep_copy=copy.deepcopy(original)

修改浅拷贝中的列表shallow_copy['a'][0]=10

浅拷贝和原对象的'a'键对应的列表共享print(original['a']) # 输出: [10, 2, 3]

修改深拷贝中的列表deep_copy['a'][0]=20

深拷贝和原对象的'a'键对应的列表不共享print(original['a']) # 输出: [1, 2, 3]

Python中浅拷贝和深拷贝的区别究竟在何处,导致它们对对象的影响如此迥异?

通过这个例子,我们可以看到浅拷贝和深拷贝的区别。在处理复杂对象时,选择合适的拷贝方式非常重要。

关于浅拷贝和深拷贝想必大家在学习中遇到很多次,这也是面试中常常被问到的问题,借由这个时间,整理一下浅拷贝和深拷贝的关系

先从一个简单的例子入手吧 定义一个数组的嵌套结构

a = [1,2,3,[4,5,[6]]]

看一下它的gable frame

当我们做一下浅拷贝copy()时,global frame

a = [1,2,3,[4,5,[6]]] //浅拷贝 b = a.copy()

可以看到,浅拷贝对浅层的数组进行了复制,但深层的引用仍然是指向了原来的引用,这样就会在操作b数组时,会对原来的数组产生修改。

深拷贝

import copy a = [1,2,3,[4,5,[6]]] //浅拷贝 b = a.copy() //深拷贝 c = copy.deepcopy(a)

可以看到,深拷贝将其内部引用也进行了拷贝,在进行数据操作时是完全使用新数组,对原来的数组不产生影响。

  • 浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
  • 深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,

使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。

到此这篇关于图解Python中浅拷贝copy()和深拷贝deepcopy()的区别的文章就介绍到这了,更多相关Python浅拷贝copy()和深拷贝deepcopy()内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!