浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层,第二层不被copy

深拷贝:  需要单独的copy模块; import copy

字符串的copy()

字符串的copy(): 也是单独开辟空间,新值的更改不影响旧值

name = ['hhh', 'ftl', 'aaa']
name2 = name.copy()
print('name_old:', id(name),name)
name2[0] = 'hello'
print('name_new:',  id(name), name)
print('name2:', id(name2), name2)

浅拷贝copy()

浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层引用关系,第二层不被copy

name = [['name',  'hello', 'sex', 'male'], 'hhh', 'ftl', 'aaa']
name3 = name.copy()
print('name_old [原始数据] :', id(name), name)
# 修改第二个字符串,不影响原来
name3[2] = 'hello'
print('name_new[更改字符后]:',  id(name), name)
print('name3   [更改字符后]:', id(name3), name3)
# 修改列表后, 新旧一起改变
name3[0][1] = 'world'
print('name_new[更改列表后]:',  id(name), name)
print('name3   [更改列表后]:', id(name3), name3)

浅拷贝讲解:

【图转载自】http://www.cnblogs.com/yuanchenqi/articles/5782764.html

深拷贝

深拷贝:等于克隆了一份,需要模块的单独支持

name = ['hhh', 222, [100, 200]]
name2 = copy.deepcopy(name)
print(id(name), id(name2))
print(name, name2)
name2[2][1] = 300
print(id(name[2][1]), id(name2[2][1]))
print(name, name2)

其他补充

查看内存地址:

name = ['hhh', 'ftl', 'aaa']
name_1 = ['hhh', 'ftl', 'aaa']
name[0] = 'good'   # 更改name[0]的值
print(id(name), name)
print(id(name_1), name_1)

注解: 字符串本身就是一个类,所以相当于开辟了2个地址空间,所以一个的改变不影响另外一个

关于整型/字符串更改前后的堆栈情况

a = [[1, 2], 3, 4]   # a 开辟的是一个整块的内存空间
b = a        #  给a 重命名了个名字 b
c = a.copy() #  c独自开了个内存空间,而且是只复制一层
print('---------------------------------- C = A.copy() ------------------------------')
print(a, id(a), id(a[0][0]), id(a[1]))
print(c, id(c), id(c[0][0]), id(c[1]))c[0][0] = 9
c[1] = 8
print(a, id(a), id(a[0][0]), id(a[1]))
print(c, id(c), id(c[0][0]), id(c[1]))
print('---------------------------------- A = B ---------------------------------')
print(a, id(a), id(a[0][0]), id(a[1]))
print(b, id(b), id(b[0][0]), id(b[1]))b[0][0] = 9
b[1] = 8
print(a, id(a), id(a[0][0]), id(a[1]))
print(b, id(b), id(b[0][0]), id(b[1]))

转载于:https://www.cnblogs.com/ftl1012/p/9382019.html

Python学习---深浅拷贝的学习相关推荐

  1. python的深浅拷贝与linux中的软硬链接

    记录一下我对python的深浅拷贝以及linux中的软硬链接的理解 放在开头 软硬连接 python中对象的深浅拷贝 浅拷贝 深拷贝 copy.copy()对可变和不可变对象的不同 总结 放在开头 在 ...

  2. python集合类型应用场景_简述Python的深浅拷贝以及应用场景

    原博文 2019-07-16 11:54 − Python的深浅拷贝以及应用场景 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.dee ...

  3. Python的深浅拷贝讲解!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约3000字,建 ...

  4. 【Python基础】Python的深浅拷贝讲解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中 ...

  5. python之深浅拷贝

    对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # ######### 数字.字符串 ######### n1 = 123 # n1 ...

  6. 【python】深浅拷贝

    在python中一切都是对象 print(type(1))print(type("Hello World"))print(type(["A","B&q ...

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

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

  8. Python的深浅拷贝

    目录 一.可变对象和不可变对象 二.概念 三.深浅拷贝 1.浅拷贝 2.深拷贝 一.可变对象和不可变对象 可变类型:列表.字典.集合 不可变类型:整数.小数.复数.字符串.元组 二.概念 = 是指向引 ...

  9. 浅谈python的深浅拷贝

    # 浅谈深浅拷贝 >>> dic = {"one":["one1","one2"],"two":{&q ...

最新文章

  1. pc工具不支持stb的加密方式_如何选择加密狗?九大标准
  2. Go变量地址值和指针的关系
  3. struts2配置详解(struts.xml配置详解)
  4. 简述mysql 存储引擎_Mysql基础-存储引擎简述
  5. 27个赢得别人欣赏的诀窍
  6. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
  7. Java 并发编程之 Atomic 类
  8. UI干货素材分享|导航设计
  9. 开源审计的最佳时机是什么时候?
  10. Linux下硬盘分区详解
  11. Qt 定制字体选择 QFontComBobox
  12. 摄影测量学习总结(较全面易懂)
  13. Centos7+搜狗拼音输入法 安装不踩雷
  14. Git使用小记——复制粘贴快捷键的修改
  15. uniapp返回上一页并刷新数据
  16. qd怎么玩java_诺基亚NOKIA手机:QD使用方法之菜鸟篇
  17. 《数据密集型应用系统设计》读书笔记——第二部分 分布式数据系统(一)
  18. java 工具类命名_给大家详解16个超级实用的Java工具类
  19. 三种典型电气减压比例阀线性度和短期重复性的对比考核试验
  20. Zabbix监控整合OneAlert报警平台实现邮件、短信、微信、电话多方式报警

热门文章

  1. 【王道计组笔记】总线(3):总线仲裁的基本概念
  2. 解决岛屿类问题(网格)通用解法DFS(附题)
  3. 【蓝桥杯】题目 1117: K-进制数
  4. sql查询分析器 只读_DRDS 只读实例来解决复杂 SQL 查询
  5. 服务器无限关机重启,服务器反复关机重启
  6. Linux查看安装了哪些软件
  7. webSphere报错:Error 500: javax.servlet.ServletException: SRVE0207E: Uncaught initialization
  8. 德鲁伊druid数据库明文密码加密
  9. 【2021牛客暑期多校训练营5】Jewels(建图,最小匹配权,KM乱搞)
  10. 计算机信息学中比较大小的代码,信息学奥赛计算机基础知识.doc