python中刪除元素所涉及到的淺複製與深複製問題

2021-08-29 07:38:22 字數 1199 閱讀 7756

比如我們現在有乙個需求,需要鍵盤輸入一組人員姓名和年齡的資料,每一行代表一條資料,想儲存在乙個二維列表中,以下有兩種方式進行實現。

第一種:

n = int(input()) # 輸入人數

data =

for i in range(n):

b =

s = input().split()

print(data)

假設輸入人數是3,那得到的結果如下:

第二種:

n = int(input()) # 輸入人數

data =

b =

for i in range(n):

s = input().split()

# 刪除b列表元素,重新輸入資料

for j in range(len(b))[::-1]:

b.pop(j)

print(data)

假設也是輸入人數為3,得到的結果如下

方法二為什麼會得不到資料呢?

難道列表刪除元素之後,其他引用到該元素的列表中的元素也會被刪除嗎?

這裡就不得不說淺複製和深複製的區別了。

淺複製(淺拷貝):複製的只是原物件元素的引用,換句話說,淺複製產生的物件本身是新的,但是它的內容不是新的,只是對原物件的乙個引用。而上面**中的「=」號複製就是淺複製的一種,只引用了其內容,而記憶體位址並不變,還是原來列表資料的位址,所以當刪除了列表中資料時,也就沒法引用了,所以方法二的結果為空列表。

深複製(深拷貝):深拷貝就是不但拷貝了內容,還分配了新的記憶體空間,此時刪除原有資料,新列表的資料也不會被刪除了。

那怎麼使用深拷貝呢?

舉了栗子(以下即為深拷貝):

a = [1]

b = a.copy()

a.remove(1)

print(b)

專案週期所涉及到的文件控制說明

專案從需求調研到專案實施,要求有乙個良性的管理過程,其中在專案週期中涉及到的文件如下 1.調研日誌包 主要包括每日調研日誌檔案 接收文件檔案夾 調研過程控制表 2.溝通與會議資料夾 包括了與對應單位的往來會議記錄 通知訊息 專案干係人說明文件 專案情況介紹ppt等內容 3.需求文件 包括了調研報告檔...

JavaScript中涉及到的RegExp型別

正規表示式 由一些普通字元和特殊字元組成的,用以描述一種特定的字元規則的表示式,它是用來限制使用者在網際網路中輸入的規則 建立正規表示式 var 變數名 正規表示式的內容 修飾符 var reg 123456789 i var 變數名 new regexp 正規表示式的內容,修飾符 var reg ...

推薦系統中涉及到Id轉換

最近的推薦系統專案中,使用spark 中的機器學習演算法實現推薦,會把收到的使用者行為資料轉換為對應的評分資料,參考電影評分資料一樣,其中spark mllib中的als演算法需要的資料格式是uid itemid rating這種格式的,其中uid,itemid是int型別的,但是server手機到...