根据数据类型分为两部分进行剖析:

  • int、str类型     
  • list、tuple、dict类型等

1.  int、str类型

【int类型实例】
>>> import copy # 导入copy模块
>>> a1=11
>>> a2=a1 # 直接赋值引用
>>> a3=copy.copy(a1) # 浅拷贝
>>> a4=copy.deepcopy(a1) # 深拷贝
>>> id(a1),id(a2),id(a3),id(a4)
>>> (1357559168, 1357559168,1357559168,1357559168) 【str类型实例】
>>> import copy # 导入copy模块
>>> b1='css'
>>> b2=b1 # 直接赋值引用
>>> b3=copy.copy(b1) # 浅拷贝
>>> b4=copy.deepcopy(b1) # 深拷贝
>>> id(b1), id(b2),id(b3),id(b4)
>>> (43826624,43826624,43826624,43826624)

由以上实例可得出:int和str类型,无论是直接赋值引用 or 深浅拷贝,均指向同一块内存空间,因此对于int和str类型的变量而言,三种方法作用相同

2. list、tuple、dict等类型(以list类型为例

【示例】
>>> import copy # 导入copy模块
>>> L1=[11,22,33,['a','b','c']] # 定义list变量,其中L1[3]的值是一个子列表
>>> L2=L1 # 直接赋值引用
>>> L3=copy.copy(L1) # 浅拷贝
>>> L4=copy.deepcopy(L1) # 深拷贝
>>> id(L1),id(L2),id(L3),id(L4)
>>> (43777928,43777928,43776968,43795912)
>>> L1.append(44) # L1列表父对象添加元素
>>> L1[3].append('d') # L1列表子对象添加元素
>>> L1
>>> [11,22,33,['a','b','c','d'],44]
>>> L2
>>> [11,22,33,['a','b','c','d'],44]
>>> L3
>>> [11,22,33,['a','b','c','d']]
>>> L4
>>> [11,22,33,['a','b','c']]

以上示例说明:

1. 直接赋值即是对象的引用,指向同一内存地址

2. 浅拷贝:只拷贝一层,如上述示例,只拷贝父对象,不拷贝父对象内部的子对象(L3[3]仍指向原L1子对象的内存地址),故分别在L1父对象和子对象中添加元素44和'd', 对L3父对象无影响,只对其子对象有影响

3. 深拷贝:拷贝父对象及子对象

python直接赋值、深浅拷贝实例剖析的更多相关文章

  1. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  2. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  3. 第五篇python进阶之深浅拷贝

    目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...

  4. python 赋值 深浅拷贝

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

  5. 人生苦短之我用Python篇(深浅拷贝、常用模块、内置函数)

    深浅拷贝 有时候,尤其是当你在处理可变对象时,你可能想要复制一个对象,然后对其做出一些改变而不希望影响原来的对象.这就是Python的copy所发挥作用的地方. 定义了当对你的类的实例调用copy.c ...

  6. Python中的深浅拷贝

    1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...

  7. python基础(6)-深浅拷贝

    赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...

  8. Python基础【3】:Python中的深浅拷贝解析

    深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...

  9. 挖一挖python中的深浅拷贝问题

    前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...

随机推荐

  1. iOS RSA (Objc)

    /* RSA.h @author: ideawu @link: https://github.com/ideawu/Objective-C-RSA */ #import <Foundation/ ...

  2. CSS3鼠标放上去旋转代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. UvaLive6441(期望概率dp)

    1.涉及负数时同时维护最大和最小,互相转移. 2.考场上最大最小混搭转移WA,赛后发现如果是小的搭小的,大的搭大的就可过,类似这种: db a = (C[i] - W[i]) * dp1[i - ][ ...

  4. Chips CodeForces - 333B

    Chips CodeForces - 333B 题意:有一个n*n的棋盘,其中有m个格子被禁止.在游戏开始前要将一些芯片(?)放到四条边上(但不能是角上).游戏开始后,每次操作将每一个芯片移动到它四周 ...

  5. JAVA常用知识总结(六)——Mybatis

    为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取, ...

  6. Hadoop体系结构管理

    一.查看Zookeeper信息 [hadoop@weekend01 ~]$zkServer.sh status JMX enabled by default Using config: /hadoop ...

  7. .net 音频转换 .amr 转 .mp3 (ffmpeg转换法)

    最近看来是跟声音干上了啊! 音频转换的第二种方法,这种方法相对第一种来说,要简单的多! 首先,你得下载个“ffmpeg.exe” 插件,然后把它放到你的项目中,如下图: 程序中会调用该文件,以助于转换 ...

  8. 初识node,原理与浏览器何其相似

    话不多说,直接上图. 今日入手开始学习Nodejs,加油吧,小小前端的大V梦ヾ(◍°∇°◍)ノ゙

  9. 在uwp仿IOS的页面切换效果

    有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码. 先分析IOS的页面切换.用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画 ...

  10. leetcode_268.missing number

    给定一个数组nums,其中包含0--n中的n个数,找到数组中没有出现的那个数. 解法一:cyclic swapping algorithm class Solution { public: int m ...