参考链接

骏马金龙

前提

想要了解深浅拷贝之前必须要知道可变和不可变类型,和他们的特性

不可变类型

数字 字符串 元组 不可变集合

特性:改变值,会创建新的内存空间存储数据

可变类型

列表 字典 可变列表

特性:改变值,还是引用之前的内存空间

Python引用赋值

开篇

引用赋值其实就是=,多个变量指向同一个内存空间

不可变案例

#a指向1000的内存地址
a = 1000
#b也指向1000的内存地址
b = a
#a指向了2000的地址,b指向1000的内存地址
a = 2000

可变案例

L = [333,444,555]
L[1] = 4444
#L的地址是没有变化的,但是L[1]的地址发生的变化

列表的内存

列表的内存结构图,第一层的地址是不会随内容的改变而改变的

Python深浅拷贝

注意

深浅拷贝这个概念其实是针对可变数据类型的,不可变类型就没有这个概念

深浅拷贝概念

浅拷贝

shallow copy,只拷贝第一层的数据。copy模块的copy()就是浅拷贝

深拷贝

deep copy,递归拷贝所有层次的数据,python中copy模块的deepcopy()是深拷贝

浅拷贝

只拷贝了第一层的数据,存放在另一个空间

马老师亲手给我画的图

为下列代码的内存分布图

from copy import copy
a = [1,2,3]
b = [4,5,a]
c = copy(b) #查看id
#id不同.第一层是完全独立的
print(id(b),id(c)) #第二层还是引用的同一个列表
b[2][0] = 200
print(id(b[2]),id(c[2])) 1800001515976 1799717541960
1800000907528 1800000907528

深拷贝

完全拷贝,两个空间是完全独立的,没有一点关系了

from copy import deepcopy
a = [1,2,3]
b = [4,5,a]
c = deepcopy(b) #全部独立
print(id(b),id(c))
print(id(b[2]),id(c[2])) 2214201160136 2216093571144
2214200551688 2214201162312

python的深浅拷贝-成为马老师的弟子的更多相关文章

  1. Python原理 -- 深浅拷贝

    python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...

  2. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

  3. 24、简述Python的深浅拷贝以及应用场景

    深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...

  4. Python入门-深浅拷贝

    首先我们在这里先补充一下基础数据类型的一些知识: 一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题: 有这样一个列表: lst = ['周杰伦','周润 ...

  5. day2学python 数据类型+深浅拷贝+循环

    数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...

  6. 简述Python的深浅拷贝以及应用场景

    深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...

  7. python 赋值 深浅拷贝

    深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...

  8. Python随笔---深浅拷贝

    Python中为了避免某些方法的副作用(拷贝后有时更改原有数据),故存在有深浅拷贝的存在 浅拷贝导入copy方法集,使用copy_copy的方法进行 深拷贝一样导入copy方法集,使用copy_dee ...

  9. python 的深浅拷贝问题

    深浅拷贝概念 基本类型和引用类型数据拷贝的问题.因为基本类型的数据大小是固定的,所以他保存在栈内存中:而引用类型的数据大小不固定,因而保存在堆内存中,单引用类型在栈内存中只保存一个指向堆内存的指针. ...

随机推荐

  1. Python基础21

    对轴0,轴1,“axis”轴的理解很关键

  2. Redis入门学习(一):简介

    Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求.同时Redis的诸多高层级功能使其可以胜任消息队列.任务队列等不同的角色. 20 ...

  3. 01-Redis 简单介绍

    Redis 简单介绍 1.Redis 是什么 Redis 是一种基于键值对的 NoSQL 数据库,与很多键值对数据库不同, redis 中的值可以有 string, hash , list , set ...

  4. Ubuntu安装MDK

    1 环境部署 [x] Ubuntu 18.04 [x] Wine 3.0.4 1.0 查看CPU信息 lscpu 序号 属性 描述 1 架构 x86_64 2 CPU 运行模式 32-bit, 64- ...

  5. 剖析linux内核中的宏-----------offsetof

    offsetof用于计算TYPE结构体中MEMBER成员的偏移位置. #ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t) &((T ...

  6. 使用IDEA创建Maven项目和Maven使用入门(配图详解)

    本文详解的讲解了使用IDEA创建Maven项目,及Maven的基础入门. 1.打开IDEA,右上角选择File->New->Project 2.如图中所示选择Maven(可按自己所需添加, ...

  7. opencv鼠标事件

    #include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...

  8. IP、MAC和端口号(六)

    在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址.MAC 地址和端口号. 一.IP地址 IP地址是 Internet Protocol Address 的缩 ...

  9. Nacos 解读:服务发现客户端

    Nacos是阿里巴巴的微服务开源项目,用于服务发现和配置管理,开源以来我就一直关注,在此准备以几篇文章来窥其全貌,但大段大段贴代码就没必要了,这里用自己的一些理解和总结来帮助大家理解.文章将基于截止目 ...

  10. Spring Data JPA整合REST客户端Feign时: 分页查询的反序列化报错的问题

    Type definition error: [simple type, class org.springframework.data.domain.Page]; nested exception i ...