判断一个元素是否为某一类型:
if type(元素) == object:
深浅复制:
import copy
浅复制:
list2 = list1.copy
list2 = copy.copy(list1)
深复制:
list3 = copy.deepcopy(list1)
区别与联系:
对于存储一般元素的列表没有区别
都是将目标对象复制出一份新的
对于复合对象(一个列表中存储的元素依旧为列表)有区别
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制,我只复制一个地址。
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
例:
import copy
list1 = [1,2,3,[4,5,6],[7,8,9]]
list2 = copy.copy(list1)
list3 = copy.deepcopy(list1)
print( id ( list1[3] ) )
print( id ( list2[3] ) )
# 这两个内存地址是相等的,说明 list2 只是引用了 list1 的 [4,5,6] ,复制了 [4,5,6] 的地址
print( id ( list3[3] ) )
# 内存地址与前两个不等,说明复制了里层的元素开辟了新的内存地址