赋值

字符串和数字

# id()函数可以获取变量在内存中的地址标识
num1 = 2;
num2 = 2;
print(id(num1))  # result:8791124202560
print(id(num2))  # result:8791124202560
str1 = '
str2 = '
print(id(str1))  # result:39986040
print(id(str2))  # result:39986040

结论:对于数字和字符串来说,赋值时如果有相同的值在python管理的内存中,python内部会把这个值的引用(地址)指向被赋值的变量

列表&字典&元组

 from copy import *
 list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')]
 list2 = list1
 #列表
 print(id(list1))  # result:30433928
 print(id(list2))  # result:30433928
 #字典
 print(id(list1[1]))  # result:31017792
 print(id(list2[1]))  # result:31017792
 #元组
 print(id(list1[2]))  # result:35446576
 print(id(list1[2]))  # result:35446576

结论:对于赋值,列表,字典,元组用的都是同一块地址

浅拷贝

字符串和数字

 from copy import *
 str1 = '
 str2 = copy(str1)  # 使用copy模块里的copy()函数进行浅拷贝
 print(id(str1))  # result:31204496
 print(id(str2))  # result:31204496
 num1 = 3
 num2 = copy(num1)
 print(id(num1))  # rsult:8791078065248
 print(id(num2))  # rsult:8791078065248

结论:数字和字符串的浅拷贝,与赋值相同,在内存当中用的也是同一个地址

列表&字典&元组

 from copy import *
 list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')]
 list2 = copy(list1)
 # 列表
 print(id(list1))  # result:42354568
 print(id(list2))  # result:42227400
 # 字典
 print(id(list1[1]))  # result:30952256
 print(id(list2[1]))  # result:30952256
 # 元组
 print(id(list1[2]))  # result:41082600
 print(id(list2[2]))  # result:41082600

 tuple1 = (1, {'a': 1, 'b': 2}, ['a', 'b', 'c'])
 tuple2 = copy(tuple1)
 # 元组
 print(id(tuple1))  # result:35668112
 print(id(tuple2))  # result:35668112
 # 字典
 print(id(tuple1[1]))  # result:30821256
 print(id(tuple2[1]))  # result:30821256
 # 列表
 print(id(tuple1[2]))  # result:35862792
 print(id(tuple2[2]))  # result:35862792

结论:对于列表和字典,浅拷贝会拷贝第一层引用(但最外层是元组时,不会拷贝).

深拷贝

字符串和数字

 from copy import *
 str1 = '
 str2 = deepcopy(str1)  # 使用copy模块里的copy()函数进行浅拷贝
 print(id(str1))  # result:31269752
 print(id(str2))  # result:31269752
 num1 = 3
 num2 = deepcopy(num1)
 print(id(num1))  # rsult:8791074002016
 print(id(num2))  # rsult:8791074002016

结论:无论是赋值或是浅拷贝亦或是深拷贝,字符串和数字都是用同一个地址

列表&字典&元组

 from copy import *
 list1 = [1, {'a': 1, 'b': 2}, [1, 2, 3], ('a', 'b', 'c')]
 list2 = deepcopy(list1)
 # 外层列表
 print(id(list1))  # result:32134984
 print(id(list2))  # result:32133768
 # 字典
 print(id(list1[1]))  # result:4410176
 print(id(list2[1]))  # result:31862720
 # 列表
 print(id(list1[2]))  # result:32262088
 print(id(list2[2]))  # result:32262408
 # 元组
 print(id(list1[3]))  # result:32038704
 print(id(list2[3]))  # result:32038704

结论:深拷贝会对列表和字典进行拷贝,但对于元组,深浅拷贝都会失效.

python基础(6)-深浅拷贝的更多相关文章

  1. python 基础之深浅拷贝

    深浅拷贝 s=[[1,2],'fgfgf','cx'] s3=s.copy() print(s) print(s3) 测试 D:\python\python.exe D:/untitled/dir/f ...

  2. Python基础:深浅拷贝

    对于数字.字符串深浅拷贝: import copy num = 0 copy_num = copy.copy(num) print("These are normal copy") ...

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

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

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

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

  5. Python 中的深浅拷贝

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

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

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

  7. python——赋值与深浅拷贝

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

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

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

  9. Python中的深浅拷贝

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

随机推荐

  1. JSP之开发环境搭建

    1.下载JDK1.8(或JDK1.7),并进行安装和配置,主要是配置环境变量JAVA_HOME及Path. 2.下载并配置Tomcat8.0(或Tomcat7.0). Windows平台请下载Tomc ...

  2. 设计模式——proxy代理模式

    目录 概述 定义 角色 为什么会有代理模式? 应用场景 示例 静态代理 例子 动态代理 JDK中生成代理对象的API 代码示例: 代码示例2 Cglib代理 代码示例 AOP(AspectOrient ...

  3. SAP Tax Service可以取代TAXBRA / RVABRA吗?(翻译) 跨国贸易云税务解决方案

    这篇文章的内容基于Fausto Motter  的一篇文章,他在SAP社区用葡萄牙语写了一篇文章,讨论如何用云解决方案取代巴西税收计算.我翻译了他的部分文章,添加并修改了一些内容,目标是帮助全球的SA ...

  4. SwipeToLoadLayout

    SwipeToLoadLayout SwipeToLoadLayout is a reusable pull-to-refresh and pull-to-load-more widget. Supp ...

  5. 【多媒体封装格式详解】--- AAC ADTS格式分析

    ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时 ...

  6. Docker-堆栈stack(6)

    堆栈(Stack)的概念: 堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起.单个堆栈能够定义和协调整个应用程序的功能,但是非常复杂的应用程序可能希望使用多个堆栈. 下面我们就开始 ...

  7. Docker-集群swarm(5)

     Docker集群的概念 群集是一组运行Docker并加入集群的计算机.在此之后,您继续运行您习惯使用的Docker命令,但现在它们由群集管理器在群集上执行.群中的机器可以是物理的或虚拟的.加入群组后 ...

  8. monit配置文件

    监控模式:(MONITRING MODE) Monit支持三种监控模式, active--Monitj监控一个服务,为了防止一系列问题,Monit会执行以及发送警报,停止,启动,重启,这是一个缺省的模 ...

  9. centos 7 mysql 开启binlog

    一.前言 本文章用到的mysql 为5.7版本. 按照https://blog.csdn.net/king_kgh/article/details/74800513中的步骤操作,结果启动失败. 配置文 ...

  10. linux signal

    1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 登录Linux时,系统会分配给 ...