python学习系列--深拷贝和浅拷贝

简介:
  1. 概念

    普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用。把新的对象置于新的内存空间中,才是拷贝。在python中,深浅拷贝的区别实际上是拷贝的深度不同。

  2. 操作

    常见的‘=’号就是一种拷贝方式。python在复制对象时实际上是调用copy模块的copy方法,即copy.copy()。而使用copy.deepcopy()函数操作就是深拷贝。对于字符串和数字来说,不管是深拷贝还是浅拷贝,都只是在原有内存地址上的新引用,所以是没有区别的。可以用id()函数来验证内存地址的异同。

  3. 字典的拷贝

    使用浅拷贝时,会生成一个新字典,而新旧字典的id值不同,但是字典中的键值的id是相同的。也就是说,浅拷贝字典时,只会复制字典的最外一层,而内层仍使用原来的内存位置。

    使用深拷贝时,同样会生成一个新字典,字典的id值不同,字典中的键也会生成新的拷贝,但是字典中的键对应的值的id仍然是相同的。那区别在哪里呢?实际上深浅拷贝的区别在于拷贝的层次不同,浅拷贝只拷贝第一层,而深拷贝会拷贝多层(所有层)。如果字典中还嵌套了列表或者字典,那么这些嵌套的层也会被拷贝。

    那字典中的键的值为什么是原来的呢?这是因为,虽然拷贝了字典,但是字典中的值仍然是对原始值(对象)的引用。这时如果改变新字典的值,那么新的引用就产生了,字典的值也就被改变了(与原始值的id不相同)。

  4. 列表和元组的copy

    与字典的copy相同,深浅拷贝的区别在于拷贝的层次不同。


本文转自 拾瓦兴阁 51CTO博客,原文链接:http://blog.51cto.com/ponyjia/1945738
相关文章
|
23天前
|
运维 Python
【Python】python深拷贝与浅拷贝详解(必须掌握)
【Python】python深拷贝与浅拷贝详解(必须掌握)
|
5月前
|
Python
93 python高级 - 深拷贝、浅拷贝
93 python高级 - 深拷贝、浅拷贝
16 0
93 python高级 - 深拷贝、浅拷贝
|
7月前
|
安全 Python
一文搞懂Python深拷贝与浅拷贝使用和区别
一文搞懂Python深拷贝与浅拷贝使用和区别
81 2
|
4月前
|
Python
Python 基础知识:解释 Python 中的深拷贝和浅拷贝有什么区别?
Python 基础知识:解释 Python 中的深拷贝和浅拷贝有什么区别?
|
1月前
|
Python
请简述Python中的深拷贝和浅拷贝的区别?并举例说明。
【2月更文挑战第25天】【2月更文挑战第84篇】请简述Python中的深拷贝和浅拷贝的区别?并举例说明。
|
1月前
|
安全 Python
Python中的深拷贝和浅拷贝的区别
Python中的深拷贝和浅拷贝的区别
15 0
|
10月前
|
Python
【Python】python深拷贝与浅拷贝详解(必须掌握)
【Python】python深拷贝与浅拷贝详解(必须掌握)
|
11月前
|
Python
python深拷贝、浅拷贝
python深拷贝、浅拷贝
|
C语言 Python
Python 标准类库-数据类型之copy-深拷贝浅拷贝操作
Python 标准类库-数据类型之copy-深拷贝浅拷贝操作
62 0