一般的仿制
- #encoding:utf-8
- #界说一个嵌套调集
- lista=[1,2,3,[4,5,6,[7,8,9]]]
- listb=lista
- #别离打印出 lista和listb的地址值
- print id(lista) #4511103096
- print id(listb) #4511103096
- #修正lista中的内容,listb中的内容也会跟着修正
- lista[0]=0
- print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
- print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
经过以上实践会发现,仿制操作便是将lista在内存中指向的地址,也让listb指向他,自身并没有在内存中创立地址。
浅仿制
- #encoding:utf-8
- #界说一个嵌套调集
- import copy
- lista=[1,2,3,[4,5,6,[7,8,9]]]
- #运用copy模块中copy办法
- listb=copy.copy(lista)
- print id(lista) #4396231640
- print id(listb) #4396231712
- #发现lista和listb在内存中的地址有差异,
- #打印元素中的第一个元素的地址值
- print id(lista[0])#140666751466536
- print id(listb[0])#140666751466536
- #元素的地址值是相同的,是不是意思便是,改动lista中的第一个元素,
- # listb中的也要改动呢
- lista[0]=0
- print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
- print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]
- #成果发现,居然没有跟着lista一同改动,为什么呢,由于运用了浅仿制呗
- #咱们在打印下lista[0]和listb[0]的地址
- print id(lista[0]) #140666751466560
- print id(listb[0]) #140666751466536
- #会发现lista[0]从头指向内存中的其他地址
- #这时候能够经过以上的办法,修正lista[3],lista[3]也是一个list
- print id(lista[3])#4499779240
- print id(listb[3])#4499779240
- #修正lista[3]中第一个元素呢
- lista[3][0]=0
- print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]
- print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]
- #发现修正lista[3][0]元素的值,listb[3][0]也会跟着改动
依据以上实践阐明,浅仿制对目标中目标没有仿制。
深仿制
- #encoding:utf-8
- #界说一个嵌套调集
- import copy
- lista=[1,2,3,[4,5,6,[7,8,9]]]
- #深仿制功用是在浅仿制上做的加强,所以具有浅仿制的功用
- listb=copy.deepcopy(lista)
- lista[3][0]=0
- print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]]
- print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]
- #深仿制会处理修正lista[3][0]值不会影响listb中的值
- #再来修正下第三层列表中元素是不是也完结仿制
- lista[3][3][0]=0
- print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]]
- print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]
- #没有遭到任何影响
本站欢迎任何方式的转载,但请有必要注明出处,尊重别人劳动成果
转载请注明: 文章转载自:BETWAY官网网 https://www.nucmc.com/show-18-1110-1.html
转载请注明: 文章转载自:BETWAY官网网 https://www.nucmc.com/show-18-1110-1.html