国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-23 00:51:21
字體:
供稿:網(wǎng)友

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

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

下面我們來介紹這些特性

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

>>> 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']

大家看到如果將列表或者字典重新賦值給另外一個變量并沒有達(dá)到預(yù)想的效果, 我們更改一個的同時另外一個也在同時更改,如果我們想保留一個快照,很明顯我們 沒有達(dá)到我們想要的效果,另外還有一種常見的使用,因為我們知道普通變量傳遞給 函數(shù),函數(shù)在內(nèi)部更改是不會影響到外部變量的,那么列表和字典呢? 我們來看如下代碼,我們創(chuàng)建一個函數(shù),是字典就添加一個鍵和值,是列表就在尾部添加一個元素

>>> 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é)果,如果這個列表/字典僅僅用在一個地方可能不會發(fā)生什么 如果我們其他地方需要同樣的列表進(jìn)行處理,如果你不知道這個特性就會產(chǎn)生很難尋找的bug 當(dāng)上面并不是我們想要的我們該如何避免上面呢,我們可以對列表/字典做一個拷貝,而不是 簡單的引用

>>> 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'}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴川市| 美姑县| 禄丰县| 铜梁县| 那坡县| 嘉兴市| 武邑县| 云安县| 湾仔区| 沈丘县| 湛江市| 抚顺市| 南陵县| 西盟| 定结县| 宁远县| 宿迁市| 镇原县| 改则县| 集安市| 耒阳市| 中牟县| 汽车| 舒兰市| 通许县| 宿州市| 东阿县| 荣成市| 上林县| 梅河口市| 吴堡县| 隆德县| 蒙自县| 娄底市| 彩票| 台州市| 城固县| 海阳市| 韶关市| 搜索| 稷山县|