欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python的字典和列表的使用中一些需要注意的地方

 更新時(shí)間:2015年04月24日 11:33:54   作者:C Wong  
這篇文章主要介紹了Python的字典和列表的使用中一些需要注意的地方,字典和列表的使用是Python學(xué)習(xí)當(dāng)中的基本功,需要的朋友可以參考下

Python 中有三個(gè)非常好用的數(shù)據(jù)結(jié)構(gòu),列表,元組和字典, 元組是不可變的,列表可以保存任意類(lèi)型的Python對(duì)象,并可以隨意擴(kuò)展沒(méi)有大小限制, 字典是一個(gè)key-value的鍵值映射的類(lèi)型,可以存放任何Python對(duì)象,可以嵌套字典, 值可以是字典元組或者字典

這里說(shuō)是Python 字典和列表的陷阱不如說(shuō)是Python的一些特性,如果不了解這些特性 就會(huì)引發(fā)一些難以尋找的bug

下面我們來(lái)介紹這些特性

Python中所有對(duì)列表和字典的使用僅僅是對(duì)原來(lái)對(duì)象的引用而不是創(chuàng)建一個(gè)新的對(duì)象 如下面代碼:

>>> info = dict(name='cold', blog='www.linuxzen.com') # 創(chuàng)建字典{'name':'cold', 'blog':'www.linuxzen.com'}
>>> info2 = info   # 賦值給info2
>>> info2['name'] = 'cold night'
>>> info
>>> info2
{'blog': 'www.linuxzen.com', 'name': 'cold night'}
>>> info
{'blog': 'www.linuxzen.com', 'name': 'cold night'}
>>> names = ['cold', 'night', 'linuxzen']
>>> names2 = names
>>> names2.append('cold night')
>>> names
['cold', 'night', 'linuxzen', 'cold night']
>>> names2
['cold', 'night', 'linuxzen', 'cold night']

大家看到如果將列表或者字典重新賦值給另外一個(gè)變量并沒(méi)有達(dá)到預(yù)想的效果, 我們更改一個(gè)的同時(shí)另外一個(gè)也在同時(shí)更改,如果我們想保留一個(gè)快照,很明顯我們 沒(méi)有達(dá)到我們想要的效果,另外還有一種常見(jiàn)的使用,因?yàn)槲覀冎榔胀ㄗ兞總鬟f給 函數(shù),函數(shù)在內(nèi)部更改是不會(huì)影響到外部變量的,那么列表和字典呢? 我們來(lái)看如下代碼,我們創(chuàng)建一個(gè)函數(shù),是字典就添加一個(gè)鍵和值,是列表就在尾部添加一個(gè)元素

>>> def add_something(info):
...   if type(info) == dict:
...       info['msg'] = 'Hello,'+ info['name']
...   elif type(info) == list:
...       info.append('add to the list')
... 
>>> info = {'name':'cold', 'blog':'www.linuxzen.com'}
>>> add_something(info)
>>> info
{'blog': 'www.linuxzen.com', 'msg': 'Hello,cold', 'name': 'cold'}
>>> names = ['cold', 'night', 'linuxzen.com']
>>> add_something(names)
>>> names
['cold', 'night', 'linuxzen.com', 'add to the list']

如上代碼明顯不是我們想要的結(jié)果,如果這個(gè)列表/字典僅僅用在一個(gè)地方可能不會(huì)發(fā)生什么 如果我們其他地方需要同樣的列表進(jìn)行處理,如果你不知道這個(gè)特性就會(huì)產(chǎn)生很難尋找的bug 當(dāng)上面并不是我們想要的我們?cè)撊绾伪苊馍厦婺?我們可以對(duì)列表/字典做一個(gè)拷貝,而不是 簡(jiǎn)單的引用

>>> names = ['cold', 'night', 'linuxzen.com']
>>> names2 = names[:]
>>> names2.append('cold night')
>>> names
['cold', 'night', 'linuxzen.com']
>>> names2
['cold', 'night', 'linuxzen.com', 'cold night']
>>> info = {'name':'cold night', 'blog':'www.linuxzen.com'}
>>> info2 = info.copy()
>>> info2['name'] = 'cold'
>>> info
{'blog': 'www.linuxzen.com', 'name': 'cold night'}
>>> info2
{'blog': 'www.linuxzen.com', 'name': 'cold'}

上面代碼列表使用[:]可以創(chuàng)建一個(gè)列表的副本而不是引用 字典的copy方法同樣可以創(chuàng)建一個(gè)字典的副本而不是引用 這樣就可以避免之前所說(shuō)的引用的情況

相關(guān)文章

  • python簡(jiǎn)單貪吃蛇開(kāi)發(fā)

    python簡(jiǎn)單貪吃蛇開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了python簡(jiǎn)單貪吃蛇開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中matplotlib條件背景顏色的實(shí)現(xiàn)

    python中matplotlib條件背景顏色的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于python中matplotlib條件背景顏色的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 對(duì)python GUI實(shí)現(xiàn)完美進(jìn)度條的示例詳解

    對(duì)python GUI實(shí)現(xiàn)完美進(jìn)度條的示例詳解

    今天小編就為大家分享一篇對(duì)python GUI實(shí)現(xiàn)完美進(jìn)度條的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python中Permission denied的解決方案

    Python中Permission denied的解決方案

    這篇文章主要介紹了Python中Permission denied的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • matplotlib?3D模型繪制一朵小紅花

    matplotlib?3D模型繪制一朵小紅花

    這篇文章主要介紹了matplotlib?3D模型繪制一朵小紅花,代碼有趣也有一定的知識(shí)參考價(jià)值,需要的朋友可以參考文章內(nèi)容下去試試
    2022-02-02
  • Python如何刪除print()中的空格

    Python如何刪除print()中的空格

    這篇文章主要介紹了Python如何刪除print()中的空格問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python實(shí)現(xiàn)簡(jiǎn)單日志記錄庫(kù)glog的使用

    python實(shí)現(xiàn)簡(jiǎn)單日志記錄庫(kù)glog的使用

    這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單日志記錄庫(kù)glog的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)SSH遠(yuǎn)程登陸,并執(zhí)行命令的方法(分享)

    Python實(shí)現(xiàn)SSH遠(yuǎn)程登陸,并執(zhí)行命令的方法(分享)

    下面小編就為大家?guī)?lái)一篇Python實(shí)現(xiàn)SSH遠(yuǎn)程登陸,并執(zhí)行命令的方法(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Python模型聚合查詢(xún)\Q查詢(xún)\F查詢(xún)\分組查詢(xún)操作技巧解析

    Python模型聚合查詢(xún)\Q查詢(xún)\F查詢(xún)\分組查詢(xún)操作技巧解析

    這篇文章主要介紹了模型查詢(xún)中的一些操作技巧,主要包括模型聚合查詢(xún),Q查詢(xún),F(xiàn)查詢(xún),分組查詢(xún),有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • Python如何定義有默認(rèn)參數(shù)的函數(shù)

    Python如何定義有默認(rèn)參數(shù)的函數(shù)

    這篇文章主要介紹了Python如何定義有默認(rèn)參數(shù)的函數(shù),幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論