## 针对数字、字符串这种类型,没有所谓的深浅拷贝
a = 10
b = copy.copy(a) ##浅拷贝
c = copy.deepcopy(b) ##深拷贝
print(id(a))
print(id(b))
print(id(c))

浅拷贝,就是只拷贝普通的成员,改变普通成员

1、浅拷贝

 1 浅拷贝---- 普通列表就是各改变各自的成员!但是列表的列表改变,拷贝前后会相互影响
  import copy 2 l = [1,2,3,4,[1,3,4]] 3 l2 = copy.copy(l) 4 #l2[0]=100 5 #print(l2) ##输出:[100, 2, 3, 4, [1, 3, 4]] ##新的列表和旧的列表指向同一地址(还是原来的列表),但是数值是不可变的,所以新列表的改变 6 #print(l) #输出:[1, 2, 3, 4, [1, 3, 4]] ## 不会影响到就的列表。。。l2改变的它的引用,l并没有改变 7 8 print('------------') 9 l2[4][0]=100 10 print(l) #输出:[1, 2, 3, 4, [100, 3, 4]] 因为新的列表的原来的列表指向的都是同一列表(列表是可修改的),所以都会改变!! 11 print(l2) #输出:[1, 2, 3, 4, [100, 3, 4]]

 

2、深拷贝

 1 ## 深拷贝-- 两个列表都不会相互影响!列表中的普通元素改变,只是改变了变量的指向(引用);但是列表中的列表是新的列表,所以不会影响
 2 l = [1,2,3,4,[1,3,4]]
 3 l2 = copy.deepcopy(l)
 4 #l2[0]=100
 5 #print(l2)  ## 输出:[100, 2, 3, 4, [1, 3, 4]]
 6 #print(l)   ## 输出:[1, 2, 3, 4, [1, 3, 4]]
 7  print('------------')
 8 l2[4][0]=100
 9 print(l)    ##输出:[1, 2, 3, 4, [1, 3, 4]]
10 print(l2)  ##输出:[1, 2, 3, 4, [100, 3, 4]]

 3

 

 1 # 针对于数字、字符串这种类型,是没有所谓的深浅拷贝的
 2 import copy
 3 
 4 ##浅拷贝 copy
 5 ##简单的来说只可拷贝对象的父级元素
 6 
 7 ##深拷贝 deepcopy
 8 ##简单的说是递归拷贝所有元素
 9 '''
10     主要分为两种情况:
11         1、纯列表:l = [1,2,3,4,5]
12             无论是浅拷贝还是深拷贝,拷贝完都是三个全新的列表,互相之间没有影响
13         2、不纯列表:l =[1,2,3,[7,8,9]]
14             (1)若是浅拷贝,产生的新列表,和原来旧列表共用l[3]!!意思是新旧列表l[3]指向的是同一内存地址
15                 假设改变旧的l[3]或者新的l[3],他们之间相互影响!!
16             (2)若是深拷贝,产生的新旧列表都是不同的内存地址!!互相不会影响
17     
18     从更深的内存地址讲:
19         id输出!!这里不在赘述!
20 '''
21 
22 l = [1, 2, 3, 4, 5, 6]
23 l1 = copy.copy(l)
24 l.append(100)
25 print(l)  # [1, 2, 3, 4, 5, 6, 100]
26 print(l1)  # [1, 2, 3, 4, 5, 6]
27 
28 l2 = copy.deepcopy(l)
29 l.append(100)
30 print(l)  # [1, 2, 3, 4, 5, 6, 100]
31 print(l2)  # [1, 2, 3, 4, 5, 6]
32 
33 print('------------------s')
34 ll = [1, 2, 3, 4, [1, 2, 3, 4]]
35 ll1 = copy.copy(ll)
36 ll[4][0] = 100
37 print('ll=', ll) ##ll= [1, 2, 3, 4, [100, 2, 3, 4]]
38 print('ll1=', ll1)##ll1= [1, 2, 3, 4, [100, 2, 3, 4]
39 
40 ll2 = copy.deepcopy(ll)
41 ll[4][0] =100
42 print('ll=',ll)  ##ll= [1, 2, 3, 4, [100, 2, 3, 4]]
43 print('ll2=',ll2) ##ll2= [1, 2, 3, 4, [1, 2, 3, 4]]

 

posted on 2018-03-31 11:39  虫子小孩  阅读(83)  评论(0编辑  收藏  举报