py100_deepcopy

py100_deepcopy_深度拷贝字典

 

1、深浅拷贝

只想拷贝不想修改原值,就会用到深浅拷贝

总结:不可变对象: 一旦创建就不可修改的对象,包括字符串,元祖,数字 
           可变对象:可以修改的对象,包括:列表、字典

 

           切片技术应用于所有序列,包括:列表、字符串 
           但切片不能应用于字典,对字典只能使用D.copy() 或 D.deepcopy() 方法

           

           深浅拷贝都是对源对象的复制,占用不同的内存空间 
          如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象                              将列表或字典中的第一级元素作为第一级,浅拷贝作用范围第一级,deep会作用更深的层级。
          如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝 
            序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

# a = 'asdasfs'
# a[3] = 's'
# print (a)

# = 等号拷贝
# a = [1,2,4,67,8]
# a1 = a
# a1[1] = 100000000
# print a1
# print a
# print ('a1','  ',id(a1))
# print ('a','  ',id(a))
# # copy 浅拷贝
import copy
a = [[1,2],[4,67],[8,6]]
a1 = copy.copy(a)
a2 = copy.deepcopy(a)
print ('a1','  ',id(a1))
print ('a','  ',id(a))
a1[2][0] = 1000000
print (a)
print(a1)
print(a2)
View Code

2 、深拷贝

   函数

def deepcopy(li):
    if isinstance(li,list):
        newl = []
        for i in li:
            if isinstance(i,(list,dict)):
                newl.append(deepcopy(i))
            else:
                newl.append(i)

    if isinstance(li,dict):
        newl = {}
        for k in li:
            if isinstance(li[k],(list,dict)):
                newl[k] = deepcopy(li[k])
            else:
                newl[k] = li[k]
    return newl

a = [[1,2],[4,67],[8,6]]
a1 = deepcopy(a)
print a1
View Code

 

posted on 2020-05-01 19:31  lexn  阅读(42)  评论(0)    收藏  举报

导航