Python之列表的append()方法最容易踩的坑及解決
導讀 | 這篇文章主要介紹了Python之列表的append()方法最容易踩的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教 |
Python列表的append()方法踩坑
在這之前,我一直認為append()只是個將一個物件新增到列表尾部的方法,但是今天之後,我對它有了一個新的認識。
一般情況下,我們都是這樣使用:
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) # 此時b的結果為[[1,2,3]] # 是的,你沒看錯,就是[[1,2,3]]
明明兩次列印之間沒有對b進行任何操作,那麼b為什麼會發生變化,問題肯定是出在了append方法上。
透過一系列的資料查詢,發現append方法是淺複製方法,什麼是淺複製呢?
官方一點的解釋就是:
在Python中,物件賦值實際上是物件的引用,當建立一個物件,然後把它賦值給另一個變數的時候,Python並沒有複製這個物件,而只是複製了這個物件的引用,這就是淺複製。
什麼,你說你還沒懂淺複製?沒關係,下面還有:
a = 1 b = 1 print(id(a)) print(id(b)) # 此時你會發現,a和b在記憶體中的地址居然是一樣的
因為在Python中,先是生成了物件,然後才是變數對物件的引用。比如,1是一個物件,然後a和b再分別對1進行引用,由於常數是不可變型別,所以1的記憶體空間是一樣的,所以a和b共用一塊記憶體空間。
形象的來解釋就是:
有一個盒子,盒子裡面放著1,然後a和b對1進行引用的時候就是直接把a和b的標籤貼到這個盒子上。
迴歸正題:
a = [1,2] b = [] b.append(a) print(b) a.append(3) print(b) # 開始時a這個盒子等於[1,2],b這個盒子等於[] # 使用b.append(a)相當於將盒子a放入盒子b中 # 所以再使用a.append(3)的時候,b也會跟著一起改變呀!!!
Python列表的append函式
append的功能
將一個元素新增到當前列表中
append的用法
用法:list.append(new_item)
引數:new_item:新增進列表的新的元素(成員)
In [19]: names = ['insane'] In [20]: names.append('loafer') In [21]: print(names) ['insane', 'loafer']
append的注意事項
- 被新增的元素只會被新增到末尾變數
- append函式是在原有列表的基礎上新增,不需要額外新增新的變數
實戰
每次只能新增一個變數
# 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) # 每次只能加入一個變數 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] 2029563540224 Process finished with exit code 0
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 初學者容易踩的 5 個坑Python
- Go新手容易踩的坑(函式與方法)Go函式
- 小白程式設計師最容易踩的“坑”,你踩過幾個?程式設計師
- 給你總結幾個ES下最容易踩的坑
- Java面試題講解,Java面試中最容易踩的坑請注意Java面試題
- Compose 延遲列表踩過的坑
- Python3中列表方法append()和extend()的區別PythonAPP
- Go新手容易踩的坑(控制結構相關)Go
- 部署Prometheus Operator完整流程及踩坑解決思路Prometheus
- 踩坑CBO,解決那些坑爹的SQL優化問題SQL優化
- golang定時任務踩坑及終極解決方案Golang
- Android 8.0 的部分坑及對應解決方法Android
- 避坑手冊 | JAVA編碼中容易踩坑的十大陷阱Java
- 《走過的路 踩過的坑》--jQuery ajax dataType返回出錯問題及解決jQuery
- 郵件營銷容易成為垃圾郵件的原因及解決方法
- 內購支付踩過的坑以及自己的解決途徑
- puppetter安裝就踩坑-解決篇
- Redis 叢集部署及踩過的坑Redis
- 【Python有坑系列】numpy.append中有坑PythonAPP
- python之 列表常用方法Python
- Angular之ngSwitch踩坑Angular
- golang—踩坑之切片Golang
- 列表中的append,extend,+=,+的區別APP
- uniapp之那些年踩過的坑APP
- C++之那些年踩過的坑C++
- HLS直播技術方案及踩過的坑
- golang的踩坑Golang
- Python 入門最容易犯的錯誤Python
- 小紅書分享踩坑和解決
- Python中列表的方法Python
- vue系列之踩坑之旅Vue
- Opengl ES之踩坑記
- vue+iframe使用及踩坑Vue
- 容器映象倉庫-Harbor的安裝及踩坑
- python列表追加元素出錯的解決Python
- 踩了的Dockerfile的坑Docker
- GeoServer 踩過的坑Server
- Python bool邏輯踩坑Python