浅拷贝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]))

Python学习---深浅拷贝的学习的更多相关文章

  1. Python原理 -- 深浅拷贝

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

  2. Python的深浅拷贝

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

  3. 图解Python中深浅拷贝

    在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...

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

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

  5. Python入门-深浅拷贝

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

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

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

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

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

  8. python 赋值 深浅拷贝

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

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

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

随机推荐

  1. Go语言包管理工具Glide

      Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...

  2. Mongodb利用aggregation实现抽样查询(按记录数和时间)

    之前对mongodb不熟,但是项目要用,因为数据量比较大,并且领导要实现抽样查询,控制数据流量,所以自己研究了下,亲测可用,分享一下! 话不多说,上代码: 第一种方案:加自增主键,实现按记录数抽样 1 ...

  3. SqlHelper中SqlHelperParameterCache类的用法介绍

    SqlHelper类中提供了三种可以用来管理SqlParameter参数的共享方法.下面来一一讲解: 1.CacheParameterSet 将SqlParameter参数数组存储到本地缓存中 2.G ...

  4. selenium+Python(Js处理浏览器滚动条)

    控制浏览器滚动条 有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助 js 是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户是否阅读 ...

  5. LinuxShell脚本编程基础4-条件测试与条件判断

    1.条件测试(test,[]) #! /bin/bash echo "请输入登陆的用户名:" read name1 if test "$name1" = &qu ...

  6. 我是怎么一步步用go找出压测性能瓶颈

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由mariolu 发表于云+社区专栏 序言: ​ 笔者要在线上服务器load日志并且重放来测一些机器性能指标.模拟机器资源比较少,相对的 ...

  7. 数据链路层差错检测之循环冗余检验CRC

    引用https://blog.csdn.net/wenqiang1208/article/details/71641414 为什么引入CRC 现实的通信链路都不会是理想的.这就是说,比特在传输的过程中 ...

  8. golang基础--Array数组

    基本特性 格式: var Name [n]<type>,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组 数组长度: 长度(len)也是数 ...

  9. jmeter(2)——元件简介、作用域及执行顺序

    上一篇主要介绍了一下 jmeter还有安装配置,这一篇来说一下它的目录组成和元件 1.目录组成 1>bin目录是可执行文件,双击jmeter.bat启动工具,也可以编辑这个批处理文件,设置jvm ...

  10. Java入门系列-23-NIO(使用缓冲区和通道对文件操作)

    NIO 是什么 java.nio全称java non-blocking(非阻塞) IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(bo ...