Python的基础语法 5 基于Python特性的深Copy和浅Copy

版权声明:https://blog.csdn.net/lancer777?assign_skin=skin-blackboard https://blog.csdn.net/lancer777/article/details/82802966

python中的深copy和浅copy

#Python bytes/str
#bytes 在Python3中作为一种单独的数据类型,不能拼接,不能拼接,不能拼接

深copy和浅copy
深copy新建一个对象重新分配内存地址,复制对象内容。浅copy不重新分配内存地址,内容指向之前的内存地址。浅copy如果对象中有引用其他的对象,如果对这个子对象进行修改,子对象的内容就会发生更改。

import copy

#这里有子对象
numbers=['1','2','3',['4','5']]
#浅copy
num1=copy.copy(numbers)
#深copy
num2=copy.deepcopy(numbers)

#直接对对象内容进行修改
num1.append('6')

#这里可以看到内容地址发生了偏移,增加了偏移‘6’的地址
print('numbers:',numbers)
print('numbers memory address:',id(numbers))
print('numbers[3] memory address',id(numbers[3]))
print('num1:',num1)
print('num1 memory address:',id(num1))
print('num1[3] memory address',id(num1[3]))


num1[3].append('6')

print('numbers:',numbers)
print('num1:',num1)
print('num2',num2)

输出:
numbers: ['1', '2', '3', ['4', '5']]
numbers memory address: 1556526434888
numbers memory address 1556526434952
num1: ['1', '2', '3', ['4', '5'], '6']
num1 memory address: 1556526454728
num1[3] memory address 1556526434952
numbers: ['1', '2', '3', ['4', '5', '6']]
num1: ['1', '2', '3', ['4', '5', '6'], '6']
num2 ['1', '2', '3', ['4', '5']]

不可变对象:创建以后就不能修改的对象,例如整形,字符串,元组。

可变对象:创建以后可以修改,例如:列表,字典,集合。

变量:系统的元素,拥有指向对象的连接空间

引用:自动生成的,从变量到对象的指针。

对象:系统分配的一块内存空间 可以存储自身的数据
深浅拷贝:
不可变对象没有深浅拷贝这一说
可变对象才能谈上深拷贝与浅拷贝

  eg:>>> a=[[1,2,3],2,0]
        >>> b=a
        >>> c=a[:]
        >>> import copy
        >>> d=copy.copy(a)
        >>> id(a)
        1538577742152
        >>> id(b)
        1538577742152
        >>> id(c)
        1538620860744
        >>> id(d)
        1538621694536
    	浅拷贝的方式:
    		import copy
    		形式1:
    		a=[1,2,3,4,5]
    		b=copy.copy(a)
    		形式2:
    		a=[1,2,3,4,5]
    		c=a[:]
            深拷贝的方式:
    		import copy
    		a=[[1,2,3],2,3]
    		b=copy.deepcopy(a)	
深浅拷贝的意义:
	浅拷贝:节省内存空间
	深拷贝:数据的保存有保障

猜你喜欢

转载自blog.csdn.net/lancer777/article/details/82802966