图解Python中深浅copy(通俗易懂)

 更新时间:2020年09月03日 08:34:19   作者:南枝向暖北枝寒MA  
这篇文章主要介绍了图解Python中深浅copy(通俗易懂),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、深浅copy

赋值运算

l1 = [1, 2, 3, [22, 33]]
l2 = l1
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33], 666]

图解:

注意:l2 = l1是一个指向,是赋值,和深浅copy无关。

浅copy

其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址

例1. 给大列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
# 或者下面这种方式,也是浅copy
# import copy
# l2 = copy.copy(l1)
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

例2. 给小列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[-1].append(666)

print(l1) # [1, 2, 3, [22, 33, 666]]
print(l2) # [1, 2, 3, [22, 33, 666]]、

例3. 将l1列表中第一个元素改为6
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 6

print(l1) # [6, 2, 3, [22, 33]]
print(l2) # [1, 2, 3, [22, 33]]

图解:

例1

例2

例3

总结:

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

注意:

切片中,如果是全切,属于浅copy。

深copy

import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
l1.append(666)
print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

图解:

本质如下图:

但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

总结:

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

到此这篇关于图解Python中深浅copy(通俗易懂)的文章就介绍到这了,更多相关Python 深浅拷贝内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python默认参数调用方法解析

    python默认参数调用方法解析

    这篇文章主要介绍了python默认参数调用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Linux下编译安装MySQL-Python教程

    Linux下编译安装MySQL-Python教程

    这篇文章主要介绍了Linux下编译安装MySQL-Python教程,本文使用编译方式安装,提供下载地址和测试安装成功方法,需要的朋友可以参考下
    2015-02-02
  • 基于Python+OpenCV制作屏幕录制工具

    基于Python+OpenCV制作屏幕录制工具

    这篇文章主要介绍了如何利用Python OpenCV实现屏幕录制工具的制作,文中的示例代码讲解详细,对我们的学习和工作有一定的价值,感兴趣的可以学习一下
    2022-01-01
  • Python测试人员需要掌握的知识

    Python测试人员需要掌握的知识

    很多朋友都想做了个python的测试人员,那么python测试员需要知道的基本知识有哪些呢?跟着小编一起学习下。
    2018-02-02
  • NumPy 与 Python 内置列表计算标准差区别详析

    NumPy 与 Python 内置列表计算标准差区别详析

    这篇文章主要介绍了NumPy与Python内置列表计算标准差区别详析,NumPy,是Numerical Python的简称,用于高性能科学计算和数据分析的基础包,更多相关内容需要的朋友可以参考一下
    2022-07-07
  • 分享8 个常用pandas的 index设置

    分享8 个常用pandas的 index设置

    这篇文章主要介绍了分享8 个常用pandas的 index设置,pandas 中的 index 是行索引或行标签。行标签可以说是 pandas 的灵魂一签,支撑了 pandas 很多强大的业务功能,比如多个数据框的 join, merge 操作,自动对齐等,下面来看看文章得具体介绍吧
    2021-12-12
  • Python数字图像处理基础直方图详解

    Python数字图像处理基础直方图详解

    这篇文章主要介绍了Python数字图像处理基础直方图详解,本文对Python直方图的定义、性质、应用以及Python直方图的计算作了详细的讲解,有需要朋友可以借鉴参考下
    2021-09-09
  • pytorch中with torch.no_grad():的用法实例

    pytorch中with torch.no_grad():的用法实例

    最近在看别人写的代码,遇到经常使用with torch.no_grad(),所以下面这篇文章主要给大家介绍了关于pytorch中with torch.no_grad():用法的相关资料,需要的朋友可以参考下
    2022-03-03
  • python 实现提取某个索引中某个时间段的数据方法

    python 实现提取某个索引中某个时间段的数据方法

    今天小编就为大家分享一篇python 实现提取某个索引中某个时间段的数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • pytorch 运行一段时间后出现GPU OOM的问题

    pytorch 运行一段时间后出现GPU OOM的问题

    这篇文章主要介绍了pytorch 运行一段时间后出现GPU OOM的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论