python 对内存的使用
浅拷贝
解释:引用的拷贝(只拷贝父对象);深拷贝
解释:对对象资源的拷贝;
导入模块:>>> import copy>>> a = [1,2,3,['a','b','d']]
>>> b = a
>>> a
[1, 2, 3, ['a', 'b', 'd']]
>>> b
[1, 2, 3, ['a', 'b', 'd']]
>>> id(a)
139712705065616
>>> id(b)
139712705065616
#定义二元列表,标签引用,且查看内存地址一致,但不能作为依据
调用copy.copy模块,进行拷贝浅拷贝>>> c=copy.copy(a)
观察c的地址空间,通过copy是独立的>>> c
[1, 2, 3, ['a', 'b', 'd']]
>>> a
[1, 2, 3, ['a', 'b', 'd']]
>>> id(c)
139712705068784 #注意
>>> id(a)
139712705065616 #注意
向序列增加值:>>> a.append('d')
>>> a
[1, 2, 3, ['a', 'b', 'd'], 'd']
>>> b
[1, 2, 3, ['a', 'b', 'd'], 'd'] #b指向的是同一地址空间
>>> c
[1, 2, 3, ['a', 'b', 'd']] #c未改变
浅拷贝只拷贝父对象:>>> id(a[3])
139712704967456
>>> id(c[3])
139712704967456
>>> id(a[4])
139712705357456
#注意上述可变类型的子对象地址空间未改变,
调用copy.deepcopy模块,进行拷贝深拷贝>>> d = copy.deepcopy(a)
查看地址空间>>> id(a)
139712705065616
>>> id(d)
139712705065688
>>> id(a[3])
139712704967456
>>> id(d[3])
139712705068640 #此处是不一致的
向序列增加值:>>> a.append('e')
>>> a
[1, 2, 3, ['a', 'b', 'd', 'd'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'd', 'd'], 'd']
>>> a[3].append('x')
>>> a
[1, 2, 3, ['a', 'b', 'd', 'd', 'x'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'd', 'd'], 'd']
对对象资源的拷贝:>>> id(a[3])
139712704967456
>>> id(d[3])
139712705068640
#注意上述可变类型的子对象地址空间发生改变