Python之列表的append()方法最容易踩的坑
Python列表的append()方法踩坑
在這之前,我一直認(rèn)為append()只是個(gè)將一個(gè)對(duì)象添加到列表尾部的方法,但是今天之后,我對(duì)它有了一個(gè)新的認(rèn)識(shí)。
一般情況下,我們都是這樣使用:
list = [1,2,3] list.append(4) # list列表就變成了[1,2,3,4]
但是在后來的使用中,遇到了像下面這樣的問題:
a = [1,2] b = [] b.append(a) print(b) a.append(3) print(b) # 此時(shí)b的結(jié)果為[[1,2,3]] # 是的,你沒看錯(cuò),就是[[1,2,3]]
?明明兩次打印之間沒有對(duì)b進(jìn)行任何操作,那么b為什么會(huì)發(fā)生變化,問題肯定是出在了append方法上。
通過一系列的資料查詢,發(fā)現(xiàn)append方法是淺拷貝方法,什么是淺拷貝呢?
官方一點(diǎn)的解釋就是:
在Python中,對(duì)象賦值實(shí)際上是對(duì)象的引用,當(dāng)創(chuàng)建一個(gè)對(duì)象,然后把它賦值給另一個(gè)變量的時(shí)候,Python并沒有拷貝這個(gè)對(duì)象,而只是拷貝了這個(gè)對(duì)象的引用,這就是淺拷貝。
什么,你說你還沒懂淺拷貝?沒關(guān)系,下面還有:
a = 1 b = 1 print(id(a)) print(id(b)) # 此時(shí)你會(huì)發(fā)現(xiàn),a和b在內(nèi)存中的地址居然是一樣的
?因?yàn)樵赑ython中,先是生成了對(duì)象,然后才是變量對(duì)對(duì)象的引用。比如,1是一個(gè)對(duì)象,然后a和b再分別對(duì)1進(jìn)行引用,由于常數(shù)是不可變類型,所以1的內(nèi)存空間是一樣的,所以a和b共用一塊內(nèi)存空間。
?形象的來解釋就是:
有一個(gè)盒子,盒子里面放著1,然后a和b對(duì)1進(jìn)行引用的時(shí)候就是直接把a(bǔ)和b的標(biāo)簽貼到這個(gè)盒子上。
回歸正題:
a = [1,2] b = [] b.append(a) print(b) a.append(3) print(b) # 開始時(shí)a這個(gè)盒子等于[1,2],b這個(gè)盒子等于[] # 使用b.append(a)相當(dāng)于將盒子a放入盒子b中 # 所以再使用a.append(3)的時(shí)候,b也會(huì)跟著一起改變呀!??!
Python列表的append函數(shù)
append的功能
將一個(gè)元素添加到當(dāng)前列表中
append的用法
用法:list.append(new_item)
參數(shù):new_item:添加進(jìn)列表的新的元素(成員)
In [19]: names = ['insane']
In [20]: names.append('loafer')
In [21]: print(names)
['insane', 'loafer']append的注意事項(xiàng)
- 被添加的元素只會(huì)被添加到末尾變量
- append函數(shù)是在原有列表的基礎(chǔ)上添加,不需要額外添加新的變量
實(shí)戰(zhàn)
每次只能添加一個(gè)變量
# coding:utf-8
books = []
print(id(books))
books.append('python')
print(books)
print(id(books))
number = 1.1
tuple_test = (1,)
dict_test = {'name': 'insane'}
books.append(number) # 每次只能加入一個(gè)變量
books.append(tuple_test)
books.append(dict_test)
print(books)
books.append('django')
books.append(1)
print(books)
print(id(books))2029563540224
['python']
2029563540224
['python', 1.1, (1,), {'name': 'insane'}]
['python', 1.1, (1,), {'name': 'insane'}, 'django', 1]
2029563540224Process finished with exit code 0
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows自動(dòng)化Python?pyautogui?RPA操作實(shí)現(xiàn)
本文詳細(xì)介紹了使用Python的pyautogui庫進(jìn)行Windows自動(dòng)化操作的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
使用Python字符串訪問與修改局部變量的實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Python字符串訪問與修改局部變量,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Python?庫?PySimpleGUI?制作自動(dòng)化辦公小軟件的方法
Python?在運(yùn)維和辦公自動(dòng)化中扮演著重要的角色,PySimpleGUI?是一款很棒的自動(dòng)化輔助模塊,讓你更輕松的實(shí)現(xiàn)日常任務(wù)的自動(dòng)化,下面通過本文給大家介紹下Python?庫?PySimpleGUI?制作自動(dòng)化辦公小軟件的過程,一起看看吧2021-12-12
Python編程實(shí)現(xiàn)控制cmd命令行顯示顏色的方法示例
這篇文章主要介紹了Python編程實(shí)現(xiàn)控制cmd命令行顯示顏色的方法,結(jié)合實(shí)例形式分析了Python針對(duì)命令行字符串顯示顏色屬性相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Django搭建項(xiàng)目實(shí)戰(zhàn)與避坑細(xì)節(jié)詳解
這篇文章主要給大家介紹了關(guān)于Django搭建項(xiàng)目實(shí)戰(zhàn)與避坑細(xì)節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
講解Python中的標(biāo)識(shí)運(yùn)算符
這篇文章主要介紹了講解Python中的標(biāo)識(shí)運(yùn)算符,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05

