Python中內(nèi)置函數(shù)append()、extend()的用法及區(qū)別詳解
1.append()函數(shù)的基本用法
append()函數(shù)可以在列表末尾添加任意類型的元素
1.1 添加整數(shù)、浮點(diǎn)數(shù)、字符串
實(shí)例:
list1 = [1, 2] list1.append(0) #添加整數(shù)類型 print('list1=', list1) list2 = [1, 2] list2.append(1.23) #添加浮點(diǎn)數(shù)類型 print('list2=', list2) list3 = [1, 2] list3.append('everything') #添加字符串類型 print('list3=', list3)
輸出:
list1= [1, 2, 0]
list2= [1, 2, 1.23]
list3= [1, 2, 'everything']
1.2 添加列表、字典
實(shí)例:
list1 = [1, 2] a = [1, 2, 3] #列表 list1.append(a) print('list1=', list1) list2 = [1, 2] b = {'小明': 1, '小虎': 2} #字典 list2.append(b) print('list2=', list2)
輸出:
list1= [1, 2, [1, 2, 3]]
list2= [1, 2, {'小明': 1, '小虎': 2}]
2.添加列表發(fā)生的同步變化問(wèn)題
2.1列表、字典同步變化
實(shí)例:列表變化
name_list = ['sam', 'dean'] number_list = [1, 2, 3] name_list.append(number_list) print(number_list) print(name_list) a = 4 number_list.append(a) print(number_list) print(name_list)
輸出:
[1, 2, 3]
['sam', 'dean', [1, 2, 3]]
[1, 2, 3, 4]
['sam', 'dean', [1, 2, 3, 4]] #結(jié)果中的number_list同步變化
2.2 運(yùn)行原理
為什么已經(jīng)被添加的列表或字典發(fā)生變化時(shí),結(jié)果中的列表或字典也同步變化,這是由于append()函數(shù)的工作原理是直接調(diào)用元素的地址。
實(shí)例1:列表變化
name_list = ['sam', 'dean'] number_list = [1, 2, 3] name_list.append(number_list) print(id(number_list)) #number_list的引用地址 print(id(name_list[2])) #添加后的引用地址
輸出:
2926810333248
2926810333248
實(shí)例2:字典變化
name_list = ['sam', 'dean'] number_list = {'a': 1, 'b': 2, } name_list.append(number_list) print(name_list) print(id(name_list[2])) print(id(number_list)) number_list['a'] = 3 print(number_list) print(name_list)
輸出:
['sam', 'dean', {'a': 1, 'b': 2}]
1986756347904
1986756347904
{'a': 3, 'b': 2}
['sam', 'dean', {'a': 3, 'b': 2}]
可以看出,添加后number_list的引用地址和原來(lái)相同,意味著如果原本number_list中值發(fā)生變化,則name_list中添加的number_list值同步變化,這在后續(xù)工作中可能出現(xiàn)問(wèn)題。
2.3 解決方案
我們可以將append()函數(shù)引用地址的功能改成引用內(nèi)容,這需要用到copy()函數(shù)。
這里要提到拷貝的兩種概念:
1.淺拷貝:拷貝對(duì)象的引用地址
2.深拷貝:拷貝對(duì)象的內(nèi)容
而copy()函數(shù)中的copy.deepcopy()可以直接拷貝列表的內(nèi)容,這樣就可以保證添加的列表值不發(fā)生改變。
實(shí)例1:列表
import copy name_list = ['sam', 'dean'] number_list = [1, 2, 3] name_list.append(copy.deepcopy(number_list)) #直接拷貝number_list的內(nèi)容 print(number_list) print(name_list) print(id(number_list)) print(id(name_list[2])) #查看此時(shí)被添加到name_list中number_list的地址 a = 4 number_list.append(a) print(number_list) print(name_list)
輸出:
[1, 2, 3]
['sam', 'dean', [1, 2, 3]]
2182206779456
2182206779392
[1, 2, 3, 4]
['sam', 'dean', [1, 2, 3]]
實(shí)例2:字典
import copy name_list = ['sam', 'dean'] number_list = {'a': 1, 'b': 2, } name_list.append(copy.deepcopy(number_list)) print(name_list) print(id(name_list[2])) print(id(number_list)) number_list['a'] = 3 print(number_list) print(name_list)
輸出:
['sam', 'dean', {'a': 1, 'b': 2}]
2607266300864
2607266269184
{'a': 3, 'b': 2}
['sam', 'dean', {'a': 1, 'b': 2}]
可以看到,經(jīng)過(guò)深度拷貝后的列表字典的地址已經(jīng)改變改變且列表值不隨原列表同步變化。
3. extend()函數(shù)的基本用法
extend()函數(shù)也是添加元素,但與append()函數(shù)的區(qū)別在于,當(dāng)添加列表或字典時(shí),extend()函數(shù)直接添加列表或字典中的元素,而append()函數(shù)則是將列表或字典當(dāng)作一個(gè)元素直接添加。
實(shí)例:
list1 = [1, 2] a = [1, 2, 3] list1.extend(a) print(list1) list2 = ['sam', 'dean'] b = {'dd': 1, 'mm': 2} list2.extend(b) print(list2)
輸出:
?[1, 2, 1, 2, 3]
['sam', 'dean', 'dd', 'mm'] #字典中的元素值不顯示
需要注意,利用attend()添加字典中元素時(shí),元素的值不顯示。
總結(jié)
到此這篇關(guān)于Python中內(nèi)置函數(shù)append()、extend()的用法及區(qū)別的文章就介紹到這了,更多相關(guān)Python內(nèi)置函數(shù)append()、extend()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python定時(shí)發(fā)送消息的腳本:每天跟你女朋友說(shuō)晚安
今天小編就為大家分享一篇關(guān)于Python定時(shí)發(fā)送消息的腳本:每天跟你女朋友說(shuō)晚安的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Python實(shí)現(xiàn)圣誕樹(shù)的多種方法
這篇文章主要為大家介紹了Python實(shí)現(xiàn)圣誕樹(shù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12Python利用shutil模塊實(shí)現(xiàn)文件夾的復(fù)制刪除與裁剪
shutil模塊是對(duì)os模塊的補(bǔ)充,主要針對(duì)文件的拷貝、刪除、移動(dòng)、壓縮和解壓操作。本文將利用shutil模塊實(shí)現(xiàn)文件夾的復(fù)制刪除與裁剪,需要的可以參考一下2022-05-05TensorFlow實(shí)現(xiàn)打印每一層的輸出
今天小編就為大家分享一篇TensorFlow實(shí)現(xiàn)打印每一層的輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解
這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過(guò)示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。2017-11-11Django?CSRF驗(yàn)證失敗請(qǐng)求被中斷的問(wèn)題
這篇文章主要介紹了Django?CSRF驗(yàn)證失敗請(qǐng)求被中斷的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09