我們知道,python中物件是分為可變和不可變的,
不可變物件比如字串、數字、元組。對不可變物件的修改,python會在記憶體中開闢新的空間,來儲存這個新的物件,
也就是,修改後的物件和原物件在記憶體中是互相獨立的兩塊空間,
可變物件比如,list、dict、set。可變物件本質是乙個容器,對可變物件的修改,也就是修改容器中的元素,
python不會開闢新的空間,也就是,記憶體中始終只存在乙個容器
問題主要出在可變物件上,下面以list為例說明
a=iflen(a):
b=a.pop()
else
: b=
#b=[8]
#a=[[8]],或者a=[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=[8,8]
#
a=[b],所以a=[[8,8]]
#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 可變物件和不可變物件
變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...
python可變物件與不可變物件
可改變的物件 例子1def change num print function parameter id num num 100 print assigin value to num id num if name main a 10 print origin id a id a change a p...
Python可變物件和不可變物件
python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...