浅拷贝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. ocr 资源

    1. PIL 在图片上添加中文 https://blog.csdn.net/m0_37606112/article/details/78511381 2 .Chinese Text in the Wi ...

  2. less变量插值

    在使用less的过程中,我在background的中引用图片路径,希望先确定一个baseurl,然后再在url中使用拼接字符串的方式拼接,尝试多次,失败. 实际上less的变量插值是有自己的一套规则的 ...

  3. Python开发利器之UliPad

    一.安装Ulipad 因为ulipad编辑器使用的是wxpython编写的gui,所以我们需要第三方库wxpython的支持,先讲一下Ulipad在Windows系统环境下的安装: 1. 确实自己的w ...

  4. android webview 中 js 模板引擎的使用

    最近在项目中要求用 webview 展示几个界面, 而后台返回的不是 html 而是 json 数据. 起初用 StringBuilder 一个一个拼 html, 后来感觉太繁琐,拼一个还行,拼多了就 ...

  5. Struts2注解详解

    一,引入支持Struts2支持注解开发jar包: struts2-convention-plugin-2.1.8.1.jar(支持Struts2框架注解开发的jar包) 二,Struts2使用注解开发 ...

  6. 游戏反编译工具dnSpy

    dnSpy使用的工具下载地址为: https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 dnSpy官方下载地址: https://github.com/ ...

  7. Mongodb cassandra 和 Mysql对比

    MongoDBDB.Cassandra和 Mysql对比 1.为什么是Nosql? 1.1 Nosql在大数据处理相对于关系型数据库具有优势 1.1.1                  1. 低延迟 ...

  8. ComboBox ItemHeight 再高一点

    public static void BindData(this ComboBox box, List<KeyValuePair<long, string>> data) { ...

  9. iOS之nib、xib及storyboard的区别及storyboard的加载过程

    先讲述下nib, nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: 区分xib和storyboard的区别? 不同点: 1> 无论nib也好 ...

  10. three.js 在vscode的智能提示

    安装nodejs.启动或者重启vscode,打开控制台,输入命令 npm install --save @types/three 回车, 会多了个node_modules文件夹,再试试智能感知,出来. ...