python基础之赋值/深copy/浅copy
首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的。
那么,让我们来对那些可变的像list set dict tuple……来进行探讨。
赋值:

有两种修改n的方法:
1 直接对n赋值

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430792
>>> id(g)
140529062430792
>>> n=[1,3]
>>> g
[1, 2]
>>> id(n)
140529062430920
>>> id(g)
140529062430792
2 对n的某个元素进行赋值

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430728
>>> id(g)
140529062430728
>>> n[1]=3
>>> g
[1, 3]
>>> id(n)
140529062430728
>>> id(g)
140529062430728
浅copy

>>> import copy
>>> name=['tong','yang']
>>> n=[1,name]
>>> g=copy.copy(n)
>>> g
[1, ['tong', 'yang']]
>>> id(n)
140529062259976
>>> id(g)
140529062259848
#两个变量(n和g)的地址不相同
当修改n的name的元素时:
>>> name[1]='hua'
>>> n
[1, ['tong', 'hua']]
>>> g
[1, ['tong', 'hua']]
>>> id(n)
140529062259976
>>> id(g)
140529062259848
#n和g的值相同,并且内存地址都没有改变
浅copy只会copy一层,所以在上例中n和g的值都改变了。
深copy

>>> name=['tong','yang']
>>> n=[1,name]
>>> g=copy.deepcopy(n)
>>> g
[1, ['tong', 'yang']] #g的第二个元素已经不是变量name了。
>>> id(n)
140529062430728
>>> id(g)
140529062259976
#n与g的地址不同
当修改name的元素时:
>>> name[1]='hua'
>>> n
[1, ['tong', 'hua']]
>>> g
[1, ['tong', 'yang']]
#n的值变了,但g的值没有变。深copy会copy所有层。
深copy则会copy所有层,并且会将其中的变量的值直接输出取代变量。
本文参考了:http://www.cnblogs.com/wupeiqi/articles/5133343.html
python基础之赋值/深copy/浅copy的更多相关文章
- 2 引用 深copy 浅copy
1. is == 总结 is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等. In [1]: a = [11,22,33] In [2]: b = [11,22,33 ...
- 深、浅copy
深.浅copy多用于列表 浅copy:第一层中不变的数据是独立的,可变类型元素指向同一块内存地址 l1 = [1,2,3,["a","b"]] l2 = l1. ...
- python学习笔记-(六)深copy&浅copy
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...
- 【Python初学】深copy&浅copy
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. copy.copy 浅拷贝 只拷贝父对象 ...
- Python 的直接赋值、Deepcopy、Copy的区别
直接赋值: 其实就是对象的引用 浅拷贝(copy): 只拷贝符对象,不会拷贝对象内部的子对象 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 有图有 ...
- python基础之赋值运算
之前的文章说明了变量的三大组成部分,详细说明了变量名与变量值,但是对于赋值这一块介绍相对较少,今天就来对这一部分进行补充,除了egon老湿所讲之外,本喵还参阅了<python3-cookbook ...
- Python基础之赋值与注释
目录 1. 花式赋值 1.1 链式赋值 1.2 交叉赋值 1.3 交叉赋值(解压缩) 2. 注释 2.1 单行注释 2.2 多行注释 1. 花式赋值 1.1 链式赋值 a = 10 b = 10 c ...
- python基础之02列表/元组/字典/set集合
python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...
- Day2-Python基础2---浅copy、深copy的差别
浅copy 首先我们来看下面一段代码: 1 >>> names = ["maqing"," peilin"," xiaoming&q ...
随机推荐
- js中if else switch 条件判断的替代方法
function condition(test){ return({ cat :function(){console.log('cat');}, dog :function(){console.log ...
- 实验三 敏捷开发与XP实践 实验报告 20135232王玥
一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2. ...
- Ubuntu16.04下 编译安装 Tensorflow
安装bazel sudo ./bazel***.sh 输入bazel version 检查是否安装. 编译tensorflow 1)./configure 除了选择支持cuda是y,其余的都选择n. ...
- 项目报错“JavaServer Faces 2.2 can not be installed : One or more constraints”等一系列问题
在做springmvc+maven项目时,经常遇到如下错误: 解决办法(这里以jdk1.8,web3.0为例): 一:保证build path的jre版本 remove掉旧版本的,add新版本 二:保 ...
- JavaWeb:HttpSession(一)
Session机制: 1).session机制采用的是在服务器端保持 HTTP 状态信息的方案 . 2).当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含 ...
- [BUAA_SE_2017]代码复审-Week2
代码复审 CheckList 1.概要部分 代码能符合需求和规格说明么? 符合,经过-c及-s合法参数测试,程序均能生成.求解相应数独. 代码设计是否有周全的考虑? 对于非法输入,程序处理不够周全. ...
- Ubuntu下面 PHPSTORM2017.2破解方法
Ubuntu下面 PHPSTORM2017.2破解方法 下载破解文件 在 http://idea.lanyus.com/上面新下载一个破解文件. 破解步骤 将JetbrainsCrack-2.6.3_ ...
- vue 引入组件
<comA></comA>此时可用在模板里 //a为vue文件,里面定义了模板import comA from './components/a' export default ...
- mysql中enum类型
ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...
- MDN & IRC
MDN IRC MDN IRC xgqfrms https://developer.mozilla.org/en-US/docs/Mozilla/QA/Getting_Started_with_IRC ...