python中深拷贝与浅拷贝
# 1.浅拷贝(复制东西)
a = [11,22,33]
# 实际上是浅拷贝
# 没有把这个变量的值赋进去,而是把另一个变量的地址拿过去了,就叫浅拷贝。
b = a
# print(id(a))
# print(id(b))
# 什么是深拷贝
import copy
c = copy.deepcopy(a) # 深拷贝
print(id(a))
print(id(c))
a.append(44)
print(a)
print(b)
print(c)
# 深拷贝和浅拷贝
aa = [11,22,33]
bb = [44,55,66]
c = [a,b]
# deepcopy深度识别
'''
>>> a = [11,22,33]
>>> b = [44,55,66]
>>> c = [a,b]
>>> c
[[11, 22, 33], [44, 55, 66]]
>>> d = c
>>> d
[[11, 22, 33], [44, 55, 66]]
>>> id(d)
2711060056904
>>> id(c)
2711060056904
>>> import copy
>>> e = copy.deepcopy(c)
>>> id(e)
2711060078984
>>> id(e[0])
2711060056968
>>> id(a)
2711060055432
>>> a.append(44)
>>> e
[[11, 22, 33], [44, 55, 66]]
>>> c
[[11, 22, 33, 44], [44, 55, 66]]
>>>
'''
# 对于列表
# copy.copy copy只能识别第一层
'''
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [a,b]
>>> e = copy.copy(c)
>>> e
[[1, 2, 3], [4, 5, 6]]
>>> a.append(4)
>>> e
[[1, 2, 3, 4], [4, 5, 6]]
>>> c
[[1, 2, 3, 4], [4, 5, 6]]
>>>
'''
# 对于元组
# copy.copy 如果是不可变类型,就不深拷贝,如果是可变类型,就只能拷贝一层
# >>> a = [1,2,3]
# >>> b = [4,5,6]
# >>> c = (a,b)
# >>> e = copy.copy(c)
# >>> id(c)
# 2711060057352
# >>> id(e)
# 2711060057352
# >>>
# 使用copy模块的copy会根据当前的拷贝的数据类型是可变类型还是不可变类型存在的不同的处理方式
python中深拷贝与浅拷贝的更多相关文章
- python 中 深拷贝和浅拷贝的理解
在总结 python 对象和引用的时候,想到其实 对于python的深拷贝和浅拷贝也可以很好对其的进行理解. 在python中,对象的赋值的其实就是对象的引用.也就是说,当创建一个对象,然后赋给另外一 ...
- python中深拷贝和浅拷贝
python中所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变 ...
- Python中深拷贝与浅拷贝的区别
转自:http://blog.csdn.net/u014745194/article/details/70271868 定义: 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给 ...
- python 中深拷贝和浅拷贝的区别
通俗的理解,浅就是外面,深就是里面.浅拷贝的意思就是只拷贝外面的一层,深拷贝就是拷贝的里面的所有. 看两段代码: 元组: #!/usr/bin/env/python # -*-coding:utf-8 ...
- 关于Python中深拷贝与浅拷贝的理解(一)---概念
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...
- Python中深拷贝与浅拷贝区别
浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...
- 关于python中赋值、浅拷贝、深拷贝之间区别的深入分析
当重新学习了计算机基础课程<数据结构和算法分析>后再来看这篇自己以前写的博文,发现错误百出.python内置数据类型之所以会有这些特性,归根结底是它采用的是传递内存地址的方式,而不是传递真 ...
- 图解python中赋值、浅拷贝、深拷贝的区别
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果.下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ...
- Python中赋值、浅拷贝与深拷贝
python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...
随机推荐
- ajax跨域请求のJSONP
简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级 ...
- 深入理解JVM - 1 - Java内存区域划分
作者:梦工厂链接:https://www.jianshu.com/p/7ebbe102c1ae来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. Java与C++之间有一堵 ...
- 项目中常用的SQL语句(SQL SERVER2008R2专版)
1.exists 关键字的使用 /****** Script for SelectTopNRows command from SSMS ******/ SELECT [RoleId] ,[RoleOr ...
- python性能分析之cProfile模块
cProfile是标准库内建的分析工具的其中一个,另外两个是hotshot和profile -s cumulative -s cumulative开关告诉cProfile对每个函数累计花费的时间进行排 ...
- 题解-USACO18DEC Balance Beam详细证明
(翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...
- ABP后台服务之作业调度Quartz.NET
一.简介 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活 ...
- T-SQL ORDER BY子句 排序方式
MS SQL Server ORDER BY子句用于根据一个或多个列以升序或降序对数据进行排序. 默认情况下,一些数据库排序查询结果按升序排列. 语法 以下是ORDER BY子句的基本语法. SELE ...
- 阿里云主机Nginx下配置NodeJS、Express和Forever
https://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3 AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我 ...
- 关于在Fragment中设置toolbar及菜单的方法
在NoActionBar的主题中onCreateOptionsMenu方法不会运行,这里就需要将toolbar强制转换为ActionBar 在加入toolbar的监听之类后需要在onCreateVie ...
- docker的安装及使用
准备工具: 系统:ubuntu18.04 docker软件包:docker-compose.tar.gz,containerd.io_1.2.4-1_amd64.deb,docker-ce-cli_1 ...