一入python深似海--浅拷贝与深拷贝
python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝。
要理解浅拷贝,必须先弄清楚python中的引用。
引用
这是一个普遍的法则。能够说
Python 没有赋值,仅仅有引用。
如。a=1,变量a仅仅是整数对象1的引用。
可变对象与不可变对象及其引用
一、不可变对象
i=73
i+=2
这里的‘=’表示引用。
二、可变对象
当对象的内容发生变化时。变量的对象引用是不会变化的。如以下的样例。
m=[5,9]
m+=[6]
列表m的每一个元素均是对象的引用。对象的生成。涉及到相应机制。如整形对象分为大整数对象和小整数对象,生成机制不同,这里不作具体阐述。
三、函数的參数传递
拷贝
(1)没有限制条件的分片表达式(L[:])可以复制序列,但此法仅仅能浅层复制。
(2)字典 copy 方法。D.copy() 可以复制字典,但此法仅仅能浅层复制
(3)有些内置函数。比如 list,可以生成拷贝 list(L)
(4)copy 标准库模块可以生成完整拷贝:deepcopy,递归 copy
浅拷贝
详细点说就是。浅拷贝是指拷贝的仅仅是原对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,可是它的内容不是新的,仅仅是对原子对象的一个引用。
import copy
aList=[[1,2],3,4]
bList=copy.copy(aList)
print aList
print bList print id(aList)
print id(bList) aList[0][0]=5 print aList
print bList
由id(aList)不等于id(bList),表明浅拷贝产生的对象本身是新的。可是它的子对象(即,那个列表)是对原子对象的一个引用。
那么3,4两个元素呢?这就要讲讲python中的可变对象和不可变对象的引用了。
import copy
aList=[[1,2],3,4]
bList=copy.copy(aList)
print aList
print bList print id(aList[1])
print id(bList[1]) aList[2]=5#变量的对象引用改变了而已
aList[0]=[0,1,1]#变量的对象引用改变了而已 print aList
print bList
总结,即浅拷贝产生的对象本身是新的。可是它的内容不是新的,仅仅是对原子对象的一个引用。
深拷贝
import copy
aList=[[1,2],3,4]
bList=aList
cList=copy.copy(aList)
dList=copy.deepcopy(aList)
print aList
print bList
print cList
print dList
print id(aList)
print id(bList)
print id(cList)
print id(dList)
aList.append(5)
aList[0].append('hello') print aList
print bList
print cList
print dList
一入python深似海--浅拷贝与深拷贝的更多相关文章
- 一入python深似海--dict(字典)的一种实现
以下是python中字典的一种实现.用list数据结构实现字典.详细是这种:[[(key1,value1),(key2,value2),...],[],[],...] 内部每个hash地址是一个lis ...
- 一入python深似海--class
python class 分为三个部分:class and object(类与对象),inheritance(继承),overload(重载)and override(覆写). class and o ...
- 一入python深似海--变量和对象
一.基本原理 Python中一切都是对象,变量是对象的引用. 这是一个普遍的法则.我们举个样例来说.Python是怎样来处理的. x = 'blue' y = 'green' z = x 当pytho ...
- 一入python深似海--range()、list与for
range使用方法 使用python的人都知道range()函数非常方便,今天再用到他的时候发现了非常多曾经看到过可是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包括5) [1 ...
- 一入python深似海--python之道
python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...
- 一入python深似海--对象的属性
Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...
- 一入Python深似海--print
先给大家来个干货^~^,学习Python的一个好站点,http://learnpythonthehardway.org/book/ 经典样例 以下是几个老经典的样例喽,刚接触Python的能够敲一敲, ...
- 「一入 Java 深似海 」系列课程
第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础
- 一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!
前言 还记得是大学2年级的时候,偶然之间看到了学长在学习python:我就坐在旁边看他敲着代码,感觉很好奇.感觉很酷,从那之后,我就想和学长一样的厉害,就想让学长教我,请他吃了一周的饭,他答应了.从此 ...
随机推荐
- UVa1583 Digit Generator
#include <stdio.h> int main(){ int T, N, i, k, digitsum, generator; scanf("%d" ...
- Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)
关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...
- jQuery.validate 中文 API
名称 返回类型 描述 validate(options) Validator 验证所选的 FORM. valid() Boolean 检查是否验证通过. rules() Options 返回元素的验证 ...
- IOS 播放音频
1,播放短音频 #import <AudioToolbox/AudioToolbox.h>#import "GLYViewController.h"static voi ...
- LintCode-丢失的第一个正整数
题目描述: 给出一个无序的正数数组,找出其中没有出现的最小正整数. 样例 如果给出 [1,2,0], return 3 如果给出 [3,4,-1,1], return 2 挑战 只允许时间复杂度O(n ...
- 英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析 (转)
在英文论文的编辑加工中,常会遇到such as, for example, e. g. , i. e. , etc. 和et al. 的错误及混淆使用.这里,举例分析这几个词的意义,并阐述其正确用法. ...
- android怎样自定义设置下拉列表样式
图样: 实现方式: 1.水平布局一个TextView和一个ImageView(小黑箭头) 2.实现点击ImageView的单击事件,弹出PopupWindow 3.PopupWindow中实现下拉列表 ...
- Android 百度地图开发问题----解决地图有时候加载不出来问题
相信很多人在开发百度地图的时候会出现百度地图有时候会加载不出来,只显示网格图. 这个问题究其原因就是申请百度key的时候填写的SHA1也就是指纹证书有问题.估计很多开发者都是照着百度开放平台上介绍的流 ...
- SPOJ LCS(Longest Common Substring-后缀自动机-结点的Parent包含关系)
1811. Longest Common Substring Problem code: LCS A string is finite sequence of characters over a no ...
- ubuntu之安装java浏览器插件
最近搞什么openstack,在浏览器访问远程虚拟机的时候,需要浏览器有支持java.这个之前真没注意过呢, 通过自己的实践写点东西,方便一下你们搞: 1,首先去http://www.java.com ...