1. <th id="d83bz"></th>
      2. 您所在位置:主頁 > 職業教育 > IT培訓 > python培訓 >

        python中可變對象和不可變對象

        時間:2022-07-28發布于:教育培訓網發布人:百學培訓瀏覽:0

        python中可變對象和不可變對象

          我們都知道在python中一起都是對象,在這個基礎上,python語言還區分了可變對象和不可變對象,不可變對象有包括int, float, bool, str,可變對象包括字典(dict), 集合(set), 元組(tuple), 列表(list),對于初學者而言,可變對象和不可變對象有什么區別,可能會導致一些困擾,在這篇文章中我們就重點說一下他們的不同。

          我們先來個例子看一下:

          >>> x = 1001

          >>> x

          1001

          >>> x = 1002

          >>> x

          1002

          從上面的代碼結果看你可能會有很困惑,x值改變了呀,不是說整形不可變對象嗎,我看x值變了呀,抱歉,你這么想是錯誤的,因為x只是創建的對象引用,這里并沒有改變對象,而且創建了一個新對象,x又引用到了新對象上,要明白具體情況,這就需要用到我們之前文章提到的id()函數,id()函數可以顯示這個對象的唯一標識,我們看一下這2個是不是具體有相同的標識符就可以了:

          >>> x = 1001

          >>> x

          1001

          >>> id(x)

          2127754933936

          >>>

          >>> x = 1002

          >>> x

          1002

          >>> id(x)

          2127757136816

          我們可以看到這是2個不同的唯一標識符,可以理解這是2個不同的對象,那可能要問,x指向了1002,那1001去哪里了?1001那也沒去,只是沒有對象的引用了,就是說無法被訪問到了,根據python內部計數器原理,當一個對象引用為0的時候,會被自動回收掉,當然這都是python內部機制,都是自動運行的。

          所以說整型就是不可變對象,當創建后就不可變化了。

          我們再說一下可變對象,我們拿列表舉例說明:

          >>> mylist = [1,2,3]

          >>> id(mylist)

          2127754786120

          >>> mylist[0] = 8

          >>> mylist

          [8, 2, 3]

          >>> id(mylist)

          2127754786120

          從以上代碼中可以看到,我們及時改變了列表的值,但列表的內存地址并沒有變,也就是對象還是之前的對象,這就是可變對象,那這里我們修改了列表的值,那如果用append()方法添加值呢?會創建一個新的對象嗎?我們看結果:

          >>> mylist = [1,2,3]

          >>> id(mylist)

          2127749796872

          >>> mylist.append(4)

          >>> mylist

          [1, 2, 3, 4]

          >>> id(mylist)

          2127749796872

          >>>

          >>> mylist.pop()

          4

          >>> mylist

          [1, 2, 3]

          >>> id(mylist)

          2127749796872

          從以上代碼可以看到,我們對列表增加值,列表的唯一標識符沒有改變,對應的我們移出某個值,同樣內存地址不會發生改變,對象始終是一個,不會產生新的對象出來,這就是可變對象。

          了解了可變和不可變對象,我們接下來說一下字典的key為什么不能是可變對象,假如我們定義個字典如下:

          >>> d = {[1,2]:'a'}

          Traceback (most recent call last):

          File "", line 1, in

          TypeError: unhashable type: 'list'

          當用列表來當key的時候會直接報錯,那為什么不能用列表來當key呢,那我們不如反過來想,假設python運行我們用列表來當key,我們定義字典如下:

          >>> d = {[1,2,3]:'a', [1,2]:'b'}

          那現在我們可以通過key[1,2,3]訪問到了值a, 我們通過key[1,2]訪問到了值b,因為列表是可變對象,那我們修改key[1,2]為[1,2,3], 如下:

          >>> d = {[1,2,3]:'a', [1,2,3]:'b'}

          那么問題就來了,現在2個key一樣,當我用key[1,2,3]來獲取值的時候,該返回a還是b的值呢?所以到這里就運行不下去了,所以字典的key必須是不可變類型,這樣才能確定的得到該得到的值。

          作者: Python運維技術 python運維技術

          來源公眾號:

          python運維技術

          聲明:

          本站(www.rxbbx.com)部分圖文轉自網絡,刊登本文僅為傳播信息之用,絕不代表贊同其觀點或擔保其真實性。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝

        熱點推薦

        推薦圖文

        熱點標簽

        强奸到高潮视频

          1. <th id="d83bz"></th>