赋值
对于赋值运算,就是共同指向一个内存地址,将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址。
如果值是可变类型那么内存地址不会变
s1 = 'alex'
s2 = s1 # 赋值
>>> print(s1,s2)
alex 6643192
alex 6643192
当值是可变类型时
s1 = []
s2 = s1
s2.append("a")
>>> print(s1,id(s1))
>>> print(s2,id(s2))
['a'] 12194696
['a'] 12194696
深浅copy
浅层copy 拷贝第一层的数据独立,第二层及以后公用一个内存地址
#copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666) #在第一层里添加数据
>>> print(l1,id(l1))
>>> print(l2,id(l2))
[1,2,3,666] 7410568
[1,2,3] 7392688
l1 = [1,[22,33],2,3]
l2 = l1.copy()
l1[1].append(666) #在第二层添加数据
>>> print(l1,id(l1))
>>> print(l2,id(l2))
[1,[22,33,666],2,3] 7411700
[1,[22,33,666],2,3] 7411700
深层copy 要引用模块 import copy 对于深copy,无论多少层,在内存中都是两个独立的内存地址
import copy
l1 = [1,[22,33,],2,3]
l2 = copy.deepcopy(l1)
l1.append(777)
l1[1].append(666)
>>> print(l1,id(l1),id(l1[1]))
>>> print(l2,id(l2),id(l2[1]))
[1,[22,33,666],2,3,777] 12617032 12618824
[1,[22,33],2,3] 12617544 12618888
网友评论