首先,不管是赋值还是深浅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的更多相关文章

  1. 2 引用 深copy 浅copy

    1. is == 总结 is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等. In [1]: a = [11,22,33] In [2]: b = [11,22,33 ...

  2. 深、浅copy

    深.浅copy多用于列表 浅copy:第一层中不变的数据是独立的,可变类型元素指向同一块内存地址 l1 = [1,2,3,["a","b"]] l2 = l1. ...

  3. python学习笔记-(六)深copy&浅copy

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...

  4. 【Python初学】深copy&浅copy

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. copy.copy 浅拷贝 只拷贝父对象 ...

  5. Python 的直接赋值、Deepcopy、Copy的区别

    直接赋值: 其实就是对象的引用 浅拷贝(copy): 只拷贝符对象,不会拷贝对象内部的子对象 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 有图有 ...

  6. python基础之赋值运算

    之前的文章说明了变量的三大组成部分,详细说明了变量名与变量值,但是对于赋值这一块介绍相对较少,今天就来对这一部分进行补充,除了egon老湿所讲之外,本喵还参阅了<python3-cookbook ...

  7. Python基础之赋值与注释

    目录 1. 花式赋值 1.1 链式赋值 1.2 交叉赋值 1.3 交叉赋值(解压缩) 2. 注释 2.1 单行注释 2.2 多行注释 1. 花式赋值 1.1 链式赋值 a = 10 b = 10 c ...

  8. python基础之02列表/元组/字典/set集合

    python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...

  9. Day2-Python基础2---浅copy、深copy的差别

    浅copy 首先我们来看下面一段代码: 1 >>> names = ["maqing"," peilin"," xiaoming&q ...

随机推荐

  1. (第十一周)Beta—review阶段成员贡献分

    项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 个人贡献分=基础分+表现分 基础分=5*5*0.5/5=2.5 成员得分如下: 成员 基础分 表现分 个人贡献 ...

  2. JAVA第一次实验 ——实验楼

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1352  姓名:潘俊洋  学号:20135230 成绩:             指导教师:娄嘉鹏 ...

  3. bata7

    目录 组员情况 组员1:胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:何宇恒 组员11:刘一好 展示组内最新 ...

  4. Codeforces Round #284 (Div. 1) C. Array and Operations 二分图最大匹配

    题目链接: http://codeforces.com/problemset/problem/498/C C. Array and Operations time limit per test1 se ...

  5. Hibernate 延迟加载 分析

    出处:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/#icomments Hibernate 的延迟加载(lazy load ...

  6. ASP.NET MVC 4.0 参考源码索引

    http://www.projky.com/asp.netmvc/4.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...

  7. jQuery之_事件绑定与解绑

    使用jQuery实现事件的绑定和解绑 就是所谓的事件操作. 1. 事件绑定(2种): * eventName(function(){}) 绑定对应事件名的监听, 例如:$('#div').click( ...

  8. 蜗牛慢慢爬 LeetCode 36.Valid Sudoku [Difficulty: Medium]

    题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  9. Oracle与SQLSERVER 批处理执行 DDL 语句

    1. 公司里面的 很多同名的数据库 的一个表都错误的多了一个列 要是每个都用数据库连接工具打开 感觉太废时间了. 比如写个sql命令来执行. 具体方法: Oracle 使用 sqlplus sqlpl ...

  10. Delphi : keydown与keypress的区别,组合键

    Shift 是一个集合变量. type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDoubl ...