浅拷贝和深拷贝

判断内容时候用=号, 判断引用 时候用 is,特例如下:在某个复制到一个正值之间(-5-255)多之间,并没有创建另外一个对象
a =100     a = 10000
b =100     b = 10000
a ==b      a ==b
true       true
a is b     a is b
true        false
---------------------------------------------------------
浅拷贝:拷贝的仅仅是引用而已,并没有另辟一片内存。 面试
a =[22,33,44]
b = a    id(a)和id(b)一样
若 a.append(99)
b = [22,33,44,99]
 
深拷贝:另辟一片内存,b指向它,并且有a的内容。 面试
a =[22,33,44]
import copy 导入一个模块
b = copy.deepcopy(a)
id(a)和id(b)不一样
若 a.append(99)
b = [22,33,44]
------------------------------------------------------------------------------------
a = [22,33,44]
b = [55,66]
c = [a,b]    [a,b]表示里面是a 的引用,和b 的引用,即地址,引用指向数据。是浅拷贝
e = copy.deepcopy(c) 深拷贝,表示另辟一片空间e,里面是a,b的引用,并且a,b 指向的数据是重新开辟的空间,
并不是原先a b的地址。
----------------------------------------------------------------------------------------------------------
在交互模式python环境中,打copy. 按tab 键,会出现很多功能,其中有个copy.copy和deepcopyde 区别是,前者只识别一层。
e = copy.copy(c)   c 中的a, b 还是原来的地址,并不重新创建。。
----------------------------------------------------------------------------------------------------------
a =[1,2,3]
b = [4,5,6]
c = (a,b) 元祖
e = copy.copy(c) copy拷贝的是不可变类型,直接就是浅拷贝。
a.append(20)
print(c)  ([1,2,3,20],[4,5,6])
print(e)  ([1,2,3,20],[4,5,6])
 
f=copy.deepcopy(c)
a.append(20)
print(c)  ([1,2,3,20],[4,5,6])
print(f)   ([1,2,3],[4,5,6])

 
posted @ 2017-06-21 10:58  西湖歌舞几时休  阅读(147)  评论(0编辑  收藏  举报