python天坑 可變物件

2022-09-14 01:27:11 字數 929 閱讀 2214

我們知道,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中的變數可以指向任...