python 深拷贝与浅拷贝
浅拷贝的方式有:
lst=[1,2,3]
(1)直接赋值: lst_cp = lst
(2)for循环遍历生成:lst_cp= [i for i in lst]
(3)copy模块下,copy.copy仍为浅拷贝
深拷贝的方式
(1)借助copy模块
>>> import copy
>>> lst_cp = copy.deepcopy(lst)
以上方法的测试:
注意:因为string类型是不可变类型,所以修改string元素时会新创建一个地址空间放置数据
(1)直接赋值
(2)for循环
>>> lst=[1,2,3]
>>> lst_cp=[i for i in lst]
>>> lst_cp
[1, 2, 3]
>>> lst_cp[1]=4
>>> lst_cp
[1, 4, 3]
>>> lst
[1, 2, 3]
>>> id(lst_cp[0])
33263960
>>> id(lst[0])
33263960
>>> id(lst_cp[1])
33263888
>>> id(lst[1])
33263936
另外注意:对于非容器类型(如数字、字符串、和其他’原子’类型的对象),浅拷贝与深拷贝相同,都是指向相同的地址空间。
因为对于非容器类型,改变其值时,不是修改当前内存中的数据,而是新开辟一块内存存储数据。
>>> ot=4
>>> id(ot)
37708144L
>>> type(ot)
<type 'int'>
>>> ot=5
>>> id(ot)
37708120L
下面一篇文章中对深拷贝与浅拷贝介绍的很清楚,地址:http://python.jobbole.com/82294/
python 深拷贝与浅拷贝的更多相关文章
- Python深拷贝和浅拷贝
1- Python引用计数[1] 1.1 引用计数机制 引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象.内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的 ...
- 【python测试开发栈】—理解python深拷贝与浅拷贝的区别
内存的浅拷贝和深拷贝是面试时经常被问到的问题,如果不能理解其本质原理,有可能会答非所问,给面试官留下不好的印象.另外,理解浅拷贝和深拷贝的原理,还可以帮助我们理解Python内存机制.这篇文章将会通过 ...
- Python深拷贝与浅拷贝区别
可变类型 如list.dict等类型,改变容器内的值,容器地址不变. 不可变类型 如元组.字符串,原则上不可改变值.如果要改变对象的值,是将对象指向的地址改变了 浅拷贝 对于可变对象来说,开辟新的内存 ...
- Python 深拷贝和浅拷贝的区别
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 ...
- python深拷贝和浅拷贝的区别
首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别. 什么是可变对象,什么是不可变对象: 可变对象 ...
- Python——深拷贝和浅拷贝
深拷贝.浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝 import copy a = [[1, 2], 3] b = copy.copy(a) print(id(a)) print(id(b) ...
- PYTHON 深拷贝,浅拷贝
声明:本篇笔记,模仿与其它博客中的内容 浅拷贝 浅拷贝,在内存中只额外创建第一层数据 import copy n1 = {"k1": "wu", "k ...
- Python 深拷贝和浅拷贝
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will= ...
- Python深拷贝和浅拷贝!
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,[& ...
随机推荐
- redhat6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpm
redhat6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpm 首先下载下面三个文件: [plain] MySQL-client-5.6.13-1.el6.x ...
- 怎么修改git提交过的内容
git修改历史提交 Git使用amend选项提供了最后一次commit的反悔.但是对于历史提交呢,就必须使用rebase了. git rebase -i HEAD~3 表示要修改当前版本的倒数第三 ...
- Giving Data Backup Option in Oracle Forms 6i
Suppose you want to give the data backup option in Oracle Forms application to some client users, wh ...
- Beaglebone Black – 智能家居控制系统 LAS - 插座组装
上一篇完成了服务端,这次是拼图的最后一块,插座. 插座一个,准备废掉它其中一个插头 预想电路草图 物料清单: 两路插座一个 继电器一个,3.3V 能驱动即可: 交流转直流 3.3V,我买了现成的模块: ...
- sizeof既是关键字,又是运算符(操作符),但不是函数!
sizeof是关键字吗 sizeof是关键字,这一点毋庸置疑.你不能将sizeof定义为任何标识符.查看C语言标准文档里的说明: sizeof是运算符(操作符)吗 C语言中,sizeof是运算符(操作 ...
- 报错 for input String ...
一个String类型的数值后面有空格,如:“10001 ” 要转化成int时用 Integer.parseInt 报错 先用.trim()去掉空格 就可以转换了 这个问题其实 ...
- PBcR - 纠错及组装算法
单分子测序reads(PB)的混合纠错和denovo组装 我们广泛使用的PBcR的原始文章就是这一篇 原文链接:Hybrid error correction and de novo assembly ...
- 【转】Image Cyborg 一键下载存储网页所有图片
下午仿照网上例子写了个抓取网页中图片并保存到本地的Python的例子,好奇就google了下是否有类似的在线抓取图片的外挂工具. 接着就找到了Pseric写的这篇文章 - Image Cyborg 一 ...
- 关于如何来构造一个String类
今天帮着一位大二的学弟写了一个String的类,后来一想这个技术点,也许不是什么难点,但是还是简单的记录一些吧! 为那些还在路上爬行的行者,剖析一些基本的实现..... 内容写的过于简单,没有涉及到其 ...
- oracle中DDL DML指什么?
DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...