Python中浅拷贝和深拷贝

Python中浅拷贝与深拷贝


参考了《Python3从入门到实战》

一、浅拷贝

浅拷贝类似复制一个网页文件,产生新的网页文件和原来的网页文件是两个不同的对象,但他们的内容是网去哪一样的

	import copy
    
    a = ['hello',[2,3,4]]#如果a是一个简单的值,a 和 b是一样的 
    b = copy.copy(a)
    print(a) 
    print(b)
    print(a is b) 
    print(id(a))
    print(id(b))
    #尽管a,b是不同的对象,但是两个对象对应元素的值是一样的,引用的是同一个对象.
    print(id(a[0]))
    print(id(b[0]))
    a[1] = 'xusong'
    print(b[1])#这样看起来好像并不会修改b
    
    '''
    ['hello', [2, 3, 4]]
    ['hello', [2, 3, 4]]
    False
    2776165785024#内存地址有可能不同,但是应该符合规则
    2776165775296
    2776165704944
    2776165704944
    [2, 3, 4]
    '''

二、深拷贝

深拷贝:和浅拷贝不同,深拷贝会对这个对象的嵌套对象进行复制(拷贝),并且对嵌套对象的嵌套对象进行拷贝(浅拷贝只对最外层的对象包含的元素值进行拷贝)

	a = ['hello',3,[3,5,6]]
    b = a.copy()
    a[2][1] = 9
    print(b[2][1])#这样就可以修改,虽然他们的id还是不一样的(因为引用不同)
    print(id(a))
    print(id(b))
    print(id(a[0]))
    print(id(b[0]))
    '''
    运行结果如下:
    
     9
    2776165806336
    2776182493248
    2776165704944
    2776165704944   
    '''
	a = ['hello',3,[3,5,6]]
    b = a#这里直接改成=
    a[2][1] = 9
    print(b[2][1])#现在我们发现,他们连所有的内存地址都一样了
    print(id(a))
    print(id(b))
    print(id(a[0]))
    print(id(b[0]))
    '''
    运行结果如下:
    
     9
    2776165883328
    2776165883328
    2776165704944
    2776165704944
    '''

猜你喜欢

转载自blog.csdn.net/qq_45911278/article/details/112011236