Python 列表拷贝
生活随笔
收集整理的這篇文章主要介紹了
Python 列表拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
Python 列表拷貝很容易搞錯,這里做一下簡單的總結。通常我們只是想根據現有的列表來創建一個全新的列表,而一說到列表拷貝,可能會下意識的想到直接用“=”,那么我們通過示例來看看實際的結果。
正文
直接使用“=”賦值
看一個示例:
listA=["aaa","bbb","ccc"] listB=listA print("listA = ",listA) print("listB = ",listB)輸出如下:
listA = ['aaa', 'bbb', 'ccc'] listB = ['aaa', 'bbb', 'ccc']這看起來好像拷貝成功了,那么再做個試驗:
listA=["aaa","bbb","ccc"] listB=listA print("listA = ",listA) print("listB = ",listB)listA.append("ddd") listB.append("eee")print("after listA = ",listA) print("after listB = ",listB)輸出如下:
listA = ['aaa', 'bbb', 'ccc'] listB = ['aaa', 'bbb', 'ccc'] after listA = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] after listB = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']這時候發現輸出結果和我們預期的并不一樣,其原因是,我們直接將 listA 賦值給 listB,實際上只是將新變量 listB 關聯到了 listA,并沒有將 listA 的副本存儲到 listB,所以當我們分別給 listA 和 listB 插入數據的時候,都是插入到 listA 中,而 listB 可以理解為 listA 的一個“別名”。所以如果想要做 Python 的列表拷貝,千萬不要用直接賦值的方式,這樣并不能得到我們想要的結果。
正確的拷貝方式
Python 提供了一種新的方式來進行列表拷貝,那就是“切片”。
示例如下:
再來看看上面的示例:
listA=["aaa","bbb","ccc"] listB=listA[:] print("listA = ",listA) print("listB = ",listB)listA.append("ddd") listB.append("eee")print("after listA = ",listA) print("after listB = ",listB)輸出結果:
listA = ['aaa', 'bbb', 'ccc'] listB = ['aaa', 'bbb', 'ccc'] after listA = ['aaa', 'bbb', 'ccc', 'ddd'] after listB = ['aaa', 'bbb', 'ccc', 'eee']OK,這才是我們真正想要的結果,listB 完全是全新的列表。
以上方式其實類似于 C++的深拷貝和淺拷貝,在使用過程中要相當注意,很容易出錯。
總結
以上是生活随笔為你收集整理的Python 列表拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac上配置 Sublime Text
- 下一篇: Python 函数参数传递