主要內(nèi)容轉(zhuǎn)載自他人csdn博客
知識(shí)點(diǎn):python中,萬(wàn)物皆對(duì)象。python中不存在所謂的傳值調(diào)用,一切傳遞的都是對(duì)象的引用,也可以認(rèn)為是傳址。
一、可變對(duì)象和不可變對(duì)象
Python在heap中分配的對(duì)象分成兩類(lèi):可變對(duì)象和不可變對(duì)象。所謂可變對(duì)象是指,對(duì)象的內(nèi)容可變,而不可變對(duì)象是指對(duì)象內(nèi)容不可變。
不可變(immutable):int、字符串(string)、float、(數(shù)值型number)、元組(tuple)
可變(mutable):字典型(dictionary)、列表型(list)
e.g:
>>> i=73
>>> a=i
>>> i+=2
>>> i
75
>>> a
73

如圖所示,當(dāng)i+=2時(shí),不可變對(duì)象的特征沒(méi)有變,變的只是創(chuàng)建了新對(duì)象,改變了變量的對(duì)象引用。同理我們創(chuàng)建新的變量a指向i時(shí),它也創(chuàng)建了自己的新對(duì)象,所以不受l的修改而修改
再舉一個(gè)可變對(duì)象的例子
e.g.:
>>> m=[5,9]
>>> a=m
>>> a
[5, 9]
>>> m.append(6)
>>> m
[5, 9, 6]
>>> a
[5, 9, 6]

這里我們對(duì)list m做了修改,因?yàn)閘ist為可變對(duì)象,所以它沒(méi)有創(chuàng)建新對(duì)象和改變對(duì)象引用,它只是修改了引用對(duì)象。同時(shí)我們讓一個(gè)新變量a指向m,因?yàn)閙的引用對(duì)象發(fā)生了改變,所以a的引用對(duì)象也發(fā)生了改變。
這里注意區(qū)分兩種可變不可變
immutable and mutable指的是上面的講解,而有時(shí)候說(shuō)list可變而tuple不可變指的是tuple一旦初始化就不能修改,它沒(méi)有像list一樣的append(),insert()這樣的方法。