Python学习---深浅拷贝的学习
浅拷贝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学习---深浅拷贝的学习的更多相关文章
- Python原理 -- 深浅拷贝
python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...
- Python的深浅拷贝
Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...
- 24、简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- Python入门-深浅拷贝
首先我们在这里先补充一下基础数据类型的一些知识: 一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题: 有这样一个列表: lst = ['周杰伦','周润 ...
- day2学python 数据类型+深浅拷贝+循环
数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...
- 简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- python 赋值 深浅拷贝
深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...
- Python随笔---深浅拷贝
Python中为了避免某些方法的副作用(拷贝后有时更改原有数据),故存在有深浅拷贝的存在 浅拷贝导入copy方法集,使用copy_copy的方法进行 深拷贝一样导入copy方法集,使用copy_dee ...
随机推荐
- Json 装 list<object>objectList
List<MallGoodComment> mallGoodCommentList = JSONObject.parseArray(mallGoodComments, MallGoodCo ...
- oracle10g获取Date类型字段无时分秒解决办法!
一般的数据库中,DATE字段仅仅表示日期,不包括日期信息,而Oracle数据库中的DATE数据类型是包括日期.时间的,对于不同的Oracle jdbc驱动版本,对于该问题的处理都有些区别. 最近使用 ...
- bug缺陷级别定义
缺陷定义: 出现以下缺陷测试定义为致命 bug l 系统无响应处于死机状态. l 点击某个菜单后出现“The page cannot be displayed”或者返回异常错误. l 进行某 ...
- 013-PaymentUtils工具类模板
package ${enclosing_package}; import java.io.UnsupportedEncodingException; import java.security.Mess ...
- validate表单校验插件笔记
1validation知识点 1 validation基础 validation插件下载http://bassistance.de/jquery-plugins/jquery-plugin-valid ...
- PL/SQL Developer中输入SQL语句时如何自动提示字段
在PL/SQL Developer中编写sql语句时,如果无法自动提示字段那是一件痛苦的事情,工作效率又低,在此演示下如何在PL/SQL Developer工具中自动提示字段,让开发者省时又省心,操作 ...
- 阿里云API公共参数的获取
阿里云公共参数API https://help.aliyun.com/document_detail/50284.html?spm=5176.10695662.1996646101.searchcl ...
- bzoj 3512: DZY Loves Math IV
Description 给定n,m,求 模10^9+7的值. Solution 设 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\) \(Ans=\sum_{i=1} ...
- 启停无线网卡bat脚本
@echo off color 2 title 启停无线网卡 echo 启动无线网卡=======>按1键 echo 关闭无线网卡=======>按2键 set /p n= if /i & ...
- Expression Blend实例中文教程(13) - 控件模板快速入门ControlTemplates
上篇,介绍了控件样式(Style)和模板(Template)的基础概念,并且演示了使用Blend设计控件样式.本篇将继续介绍使用Blend设计自定义控件模板 - ControlTemplate.Con ...