1. 程式人生 > >python天坑------可變對象

python天坑------可變對象

字符串 print 修改 字體 set 並且 spa 字體加粗 獨立

我們知道,python中對象是分為可變和不可變的,

不可變對象比如字符串、數字、元組。對不可變對象的修改,python會在內存中開辟新的空間,來存儲這個新的對象,

也就是,修改後的對象和原對象在內存中是互相獨立的兩塊空間,

可變對象比如,list、dict、set。可變對象本質是一個容器,對可變對象的修改,也就是修改容器中的元素,

python不會開辟新的空間,也就是,內存中始終只存在一個容器

問題主要出在可變對象上,下面以list為例說明

a=[]
if len(a):
    b=a.pop()
else:
    b=[]
b.append(8)
#b=[8]
a.append(b)
#a=[[8]],或者a=[b] a.append(b) #a=[[8],[8]],或者a=[b,b] print(a:,a) print(b:,b) if len(a): b=a.pop() #b=[8] #a=[[8]],或者a=[b] else: b=[] b.append(8) #b=[8,8] #a=[b],所以a=[[8,8]] a.append(b) #a=[b,b],所以a=[[8,8],[8,8]] print(a:,a) print(b:,b) 輸出: a: [[8], [8]] b: [8] a: [[8, 8], [8, 8]] b: [
8, 8]

由於a中的元素是b,

而b是個容器,裏面的元素是可變的,

當b中的元素變化的時候,a也會跟著變,如上述字體加粗部分


總結:

如果需要保存可變對象,並且該可變對象一直在變化時,需要保存其深拷貝對象,切記!

python天坑------可變對象