python直接赋值、浅拷贝和深拷贝
import copy names = ['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]] # 直接赋值,指向同一个内存地址
names1 = names # 浅拷贝:重新分配一块内存,创建一个新的对象,里面的元素是指原对象中子对象的引用
names2 = list(names)# 数据类型本身的构造器
names3 = names1[:] # 切片
names4 = copy.copy(names) # 深拷贝:递归地拷贝原对象中的每一个子对象
names5 = copy.deepcopy(names)
names1[0] = 'haha'
names1[-1][0] = 44 print(names1)
print(names2)
print(names3)
print(names4)
print(names5) # 输出
"""
['haha', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象和子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]#父对象和子对象都是独立的
"""
总结:
赋值就是系统先给一个对象分配了内存地址,然后再将内存地址指向另一个对象,如a=b
浅拷贝是父对象独立,但是子对象指向同一个内存地址
通常用数据类型本身的构造器如list(),set()
python提供的函数copy.copy()可以适用于任何数据类型
对于可变序列,可以通过切片操作符':'来完成浅拷贝
深拷贝是和原来的父子对象完全独立,父对象和子对象都指向完全不同的内存地址,copy.deepcopy()
相同值的可变类型的内存地址是不一样的,但是修改时不需要开辟一块新的空间,只需修改原内存地址就行了
相同值的不可变类型的内存地址是一样的
python直接赋值、浅拷贝和深拷贝的更多相关文章
- 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...
- 16.python中的浅拷贝和深拷贝
在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b
- Python 引用、浅拷贝、深拷贝解析
引用 Python是动态数据类型的语言,故在对变量进行赋值时是不用制定变量类型的. 或者说,你可以把变量赋值的过程,当作是贴一个标签,去引用该数据. 看下面的例子: In [54]: a=4 In [ ...
- python 基础之浅拷贝与深拷贝
浅拷贝与深拷贝 1.普通赋值 例1: a = 15b = aa = 16print(b)#例2:lst1 = [1,2,3]lst2 = lst1lst1.append(4)print(lst2)#这 ...
- python 进阶篇 浅拷贝与深拷贝
阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...
- python中的浅拷贝,深拷贝
直接引用,间接引用 # 1.列表存储的是索引对应值的内存地址,值会单独的开辟一个内存空间 list = ["a","b"] 内存里面存储的就是list[0],l ...
- python中赋值-浅拷贝-深拷贝之间的关系
赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...
- python中的浅拷贝和深拷贝
1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...
- Python核心编程--浅拷贝与深拷贝
一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...
- Python中的浅拷贝与深拷贝
编者注:本文主要参考了<Python核心编程(第二版)> 以下都是参考资料后,我自己的理解,如有错误希望大家不吝赐教. 大家有没有遇到这样一种情况,对象赋值后,对其中一个变量进行修改,另外 ...
随机推荐
- NC 的简单使用
netcat被誉为网络安全界的’瑞士军刀’,相信没有什么人不认识它吧……一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松 ...
- web开发之Cookie使用
做过web开发的小伙伴对于Cookie一定不陌生,当用户登录后将用户的账号保存到本地,密码保存时,建议使用MD5进行加密,以防止用户个人信息的泄露.今天和大家简单聊聊关于Jquer Cookie的使用 ...
- github的README.md文件格式
一.在线编辑器:stackedit 网址:https://stackedit.io/ README.md是使用Markdown语法.基本规则如下: Markdown 语法速查表 1 标题与文字格式 标 ...
- 基于ELK的简单数据分析
原文链接: http://www.open-open.com/lib/view/open1455673846058.html 环境 CentOS 6.5 64位 JDK 1.8.0_20 Elasti ...
- python nose测试框架全面介绍九---各种html报告插件对比
一直在使用Nose-html-reporting,并输出html报告,但今天在使用时发出有点问题:于时,将python目前可能的html报告插件下载后进行对比,如下 一.Nose-html-repor ...
- 用mongoose实现mongodb增删改查
//用户 var mongoose = require("mongoose"), setting = require("./setting"); //配置连接数 ...
- Spark ML包,数据挖掘示例数据Affairs
1.数据字段解释 affairs:一年来婚外情的频率 gender:性别 age:年龄 yearsmarried:婚龄 children:是否有小孩 religiousness:宗 ...
- php base64转图片
1.解析base64数据成图片 The problem is that data:image/bmp;base64, is included in the encoded contents. This ...
- [转]-[携程]-A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems
原文链接:推荐系统中基于深度学习的混合协同过滤模型 近些年,深度学习在语音识别.图像处理.自然语言处理等领域都取得了很大的突破与成就.相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段. 携程 ...
- 字符串匹配 扩展KMP BM&Sunday
复杂度都是O(n) 扩展1:BM算法 KMP的匹配是从模式串的开头开始匹配的,而1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹 ...