一、数字、字符串不论是浅拷贝、深拷贝都是指向一个地址。

a = 1
b = "abc"
print (id(a))
print (id(b))
a1 = a
b1 = b
print (id(a1),id(b1))
a2 = copy.copy(a)
b2 = copy.copy(b)
print (id(a2),id(b2))
a3 = copy.deepcopy(a)
b3 = copy.deepcopy(b)
print (id(a3),id(b3))

二、列表、元组、字典的浅拷贝、深拷贝指向的地址是变化的。

1.元组中包含列表、字典

#定义个函数:打印元组中所有数据的地址
def print_tuple(tuple):
tup = tuple
print tup,id(tup)
for k, v in enumerate(tup, 1):
print v, id(v)
if type(v) == list:
key = v
for k, v in enumerate(key, 1):
print v, id(v)
elif type(v) == dict:
key = v
for item in key:
print item, id(item)
print key[item], id(key[item])
tup = (1,2,['a','b'],{"k1":11})
print "1、元组中包含字典、列表"
print_tuple(tup) #tup1 = tup
#print "======赋值后======"
#print_tuple(tup1) tup2 = copy.copy(tup)
print "======浅拷贝后======"
print_tuple(tup2) tup3 = copy.deepcopy(tup)
print "======深拷贝后======"
print_tuple(tup3)

赋值、浅拷贝后,元组和元组中所有元组地址,都指向的是一个地址;

深拷贝后,元组、元组中列表、字典的地址都是新创建的,其他的元素地址与原来一致;

2.字典中包含列表、元组

#定义个函数:打印字典中所有数据的地址
def print_dic(dict):
dic = dict
print dic,id(dic)
for item in dic:
print item, id(item)
print dic[item], id(dic[item])
if type(dic[item]) == list:
li = dic[item]
for k, v in enumerate(li, 1):
print v, id(v)
elif type(dic[item]) == tuple:
tup = dic[item]
for k, v in enumerate(tup, 1):
print v, id(v) dic = {"a":11,"c":12,"d":('x',100,'z'),"":["b",13]}
print "2、字典包含列表、元组"
print_dic(dic)
#dic1 = dic
#print "======赋值后======"
#print_dic(dic1) dic2 = copy.deepcopy(dic)
print "======深拷贝后======"
print_dic(dic2) #dic3 = copy.copy(dic)
#print "======浅拷贝后======"
#print_dic(dic3)

赋值指向的是一个地址;

浅拷贝后,字典的地址是新创建的,里面元素(包括列表、元组)的地址与原来一致;

深拷贝后,字典的地址、字典中列表的地址是新创建的,元组的地址还是原来的,里面的元素地址与原来一致;

3.列表中包含字典、元组

#定义个函数:打印列表中所有数据的地址
def print_out(list):
li = list
print li,id(li)
for item in li:
print item, id(item) # print li[i],id(li[i])
if type(item) == dict:
dic = item
# for k,v in enumerate(dic,1):
# print k,id(k)
# print v,id(v)
for item in dic:
print item, id(item)
print dic[item], id(dic[item])
elif type(item) == tuple:
tup = item
for k, v in enumerate(tup, 1):
print v, id(v) li = ['',('x','y'),{"k1":0,"k2":10}]
print_out(li)
#li1 = li
#print "======赋值后======"
# print_out(li1)
#li2 = copy.copy(li)
#print "======浅拷贝后======"
#print_out(li2)
li3 = copy.deepcopy(li)
print "======深拷贝后======"
print_out(li3)

赋值指向的是一个地址;

浅拷贝后,列表的地址是新创建的,里面元素(包括字典、元组)的地址与原来一致;

深拷贝后,列表的地址、列表中字典的地址是新创建的,元组的地址还是原来的,其他的元素地址与原来一致;

总结:

1.元组本身在深浅拷贝中,地址会变;但作为列表或者字典的元素时,在深拷贝列表或字典时,地址是不变的。

2.列表、字典本身在浅拷贝中地址会变;作为元素时,在深拷贝中地址才会变;

Python练习四-浅拷贝&深拷贝的更多相关文章

  1. python开发_copy(浅拷贝|深拷贝)_博主推荐

    在python中,有着深拷贝和浅拷贝,即copy模块 下面我们就来聊一下: 运行效果: ================================================== 代码部分: ...

  2. Python中的浅拷贝 深拷贝

    浅拷贝只拷贝父对象,子对象的地址空间不改变,包括下面三种: 1. copy 从下面的例子可以看出对象c从a拷贝,当对象a增加一个列表元素之后,c对象没有改变, 而当对象a中的子列表改变时,对象c的子列 ...

  3. PythonStudy1——Python 值拷贝 浅拷贝 深拷贝

    拷贝:对值进行复制的过程 # 值拷贝:应用场景最多  ls = [1, 'abc', [10]] ls1 = ls # ls1直接将ls中存放的地址拿过来  # ls内部的值发生任何变化,ls1都会随 ...

  4. python中赋值-浅拷贝-深拷贝之间的关系

    赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...

  5. JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

    一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...

  6. Python__学习路上的坑之--引用,浅拷贝,深拷贝

    copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可 ...

  7. C#四种深拷贝方法

    //四种深拷贝方法 public static T DeepCopyByReflect<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || ...

  8. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  9. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

随机推荐

  1. IDEA--IDEA配置web项目

    参考:https://blog.csdn.net/kfm1376822651/article/details/79666586 记学习springmvc时,使用idea部署web项目至tomcat. ...

  2. Uber推出全新交通估算体系能颠覆传统模式吗?

    当下,大众的交通出行正在被全面颠覆.除了传统的出行方式外,共享打车.共享单车.共享滑板车.分时租赁的共享汽车等,正在形成一个全新交通出行矩阵.鉴于交通出行市场的巨大潜力,众多巨头及独角兽企业在绞尽脑汁 ...

  3. kubelet组件详解---链接

    https://blog.csdn.net/jettery/article/details/78891733

  4. mysql自关联和多表连接查询

    自关联操作         多表连接查询  inner  join 内查询   left  join  左查询   right  join  右查询                          ...

  5. POJ 1837:Balance 天平DP。。。

    Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11878   Accepted: 7417 Descript ...

  6. MySQL--索引和外键

    来自:http://www.jb51.net/article/32149.htm 1.添加PRIMARY KEY(主键索引)  ALTER TABLE `table_name` ADD PRIMARY ...

  7. git 知识罗列

    git pull is basically a shortcut for two operations: git fetch which downloads the history from the ...

  8. zip4j 2.0压缩 加密压缩

    https://github.com/srikanth-lingala/zip4j ZipParameters zipParameters = new ZipParameters(); zipPara ...

  9. 如何实现MVC ActionResult 返回类型为JavaScriptResult

    必需的js引用文件 <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>@Scripts ...

  10. 正确返回Unicode码点大于0xFFFF的字符串长度

    如下: function codePointLength(text){ var result = text.match(/[\s\S]/gu); return result? result.lengt ...