1.可變對象和不可變對象

Python中,萬物皆對象。

python中不存在所謂的傳值調用,一切傳遞的都是對象的引用,也可以認為是傳址。

一、可變對象和不可變對象

Python在heap中分配的對象分成兩類:可變對象和不可變對象。所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變。

不可變(immutable):int、字符串(string)、float、(數值型number)、元組(tuple)

可變(mutable):字典型(dictionary)、列表型(list)

i =73

i +=2



從上圖可知,不可變對象的特征沒有變,變的只是創建了新對象,改變了變量的對象引用。


>>>x = 1

>>>y = 1

>>>x = 1

>>> x is y

True

>>>y is z

True

如上所示,因為整數為不可變,x,y,z在內存中均指向一個值為1的內存地址,也就是說,x,y,z均指向的是同一個地址,值得注意的是,整形來說,目前僅支持(-1,100)。

總結一下,不可變對象的優缺點。

優點是,這樣可以減少重復的值對內存空間的占用

缺點呢,如例1所示,我要修改這個變量綁定的值,如果內存中沒用存在該值的內存塊,那么必須重新開辟一塊內存,把新地址與變量名綁定。而不是修改變量原來指向的內存塊的值,這回給執行效率帶來一定的降低。

下面看一個可變對象的例子(例3)


二、函數參數:

Python函數參數對于可變對象,函數內對參數的改變會影響到原始對象;對于不可變對象,函數內對參數的改變不會影響到原始參數。原因在于:

1、可變對象,參數改變的是可變對象,其內容可以被修改。

2、不可變對象,改變的是函數內變量的指向對象。


Python中的對象包含三要素:id、type、value

其中id用來唯一標識一個對象,type標識對象的類型,value是對象的值

is判斷的是a對象是否就是b對象,是通過id來判斷的

==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的

如下代碼或許可以幫助你理解。

>>> a = 1

>>> b = 1.0

>>> a is b

False

>>> a == b

True

>>> id(a)

12777000

>>> id(b)

14986000

>>> a = 1

>>> b = 1

>>> a is b

True

>>> a == b

True

>>> id(a)

12777000

>>> id(b)

12777000

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,123評論 6 13
  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,754評論 0 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,113評論 25 708
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,759評論 18 399
  • 自古逢秋悲寂寥,我言秋日勝春朝。秋天的美,美在色彩絢爛,美在天空的透徹和干凈。
    靜小靜0303閱讀 447評論 0 0