python知識點 可變物件和不可變物件

2021-07-28 06:58:55 字數 2513 閱讀 2612

python中,物件分為可變(mutable)和不可變(immutable)兩種型別。

元組(tuple)、數值型(number)、字串(string)均為不可變物件,而字典型(dictionary)和列表型(list)的物件是可變物件。

#coding:utf-8;

i_int = 10

j_int = 10

k_int = 11

i_str = 'python'

j_str = 'python'

k_str = 'python world'

i_tuple = (1,2)

j_tuple = (1,2)

k_tuple = (1,2,3)

print

"i_int's id",str(id(i_int))

print

"j_int's id",str(id(j_int))

print

"k_int's id",str(id(k_int))

print

"i_str's id",str(id(i_str))

print

"j_str's id",str(id(j_str))

print

"k_str's id",str(id(k_str))

print

"i_tuple's id",str(id(i_tuple))

print

"j_tuple's id",str(id(j_tuple))

print

"k_tuple's id",str(id(k_tuple))

output:

i_int's id 30498944

j_int's id 30498944

k_int's id 30498920

i_str's id 140092758495168

j_str's id 140092758495168

k_str's id 140092757760912

i_tuple's id 140092757580688

j_tuple's id 140092757580760

k_tuple's id 140092757698192

發現了int,str的指向的值是一樣的,那麼它們的記憶體id一致;

值得注意的是tuple雖然都是(1,2),但記憶體id是不一樣的;

j_int = j_int + 1

j_str = j_str + str("add something")

print "modified:j_int's id",str(id(j_int))

print "modified:j_str's id",str(id(j_str))

output:

modified

:j_int's id 30498920

modified:j_str's id 140092757761304

可以看到j_int和j_str的id已經改變,不再指向原來id。

#immutable

tmp = j_int

print

"tmp's id",str(id(tmp))

tmp = tmp + 1

print

"modified:tmp's id",str(id(tmp))

print

"j_int",j_int

print

"tmp",tmp

#mutable

dt =

d = dt

print

"dt's id",str(id(dt))

print

"d's id",str(id(d))

d[3]='3'

print

"dt's id",str(id(dt))

print

"d's id",str(id(d))

for i in dt.keys():

print

"dt's key",i

for i in d.keys():

print

"d's key",i

output:

tmp's id 30498920

modified:tmp's id 30498896

j_int 11

tmp 12

dt's id 140092757766224

d's id 140092757766224

dt's id 140092757766224

d's id 140092757766224

dt's key 1

dt's key 2

dt's key 3

d's key 1

d's key 2

d's key 3

參考:

解釋不錯

Python基礎 Python可變物件和不可變物件

python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。運用這樣的機制...

Python基礎 Python可變物件和不可變物件

python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。1 淺拷貝和深拷貝 淺拷貝實施方式 1 完全切片操作 2 利用工廠函式,比如list dict 等,3 使用copy 模組的copy 函式.深...

Python知識點 物件導向程式設計

物件導向程式設計是一種程式設計正規化,把程式看作不同物件的相互呼叫,對現實世界建立物件模型。定義乙個person類如下 class person object pass格式為 class 類名 object object表示定義的類是由那個類繼承下來的 函式體pass類名一般以大寫開頭。建立例項使用...