# RUST 和 GO 如何管理它們的記憶體 ## Go 中的記憶體管理 Go 中的記憶體不會在緩存鍵被驅逐時立即釋放。 相反,垃圾收集器會經常運行以發現任何沒有引用的記憶體並釋放它。 換句話說,記憶體會一直掛起,直到垃圾收集器可以評估它是否真正不再使用,而不是在不再需要時立即釋放。 Go 必須付出的努力來找 ...
1.Python 中的列表是什麼?給初學者的定義
編程中的數組是一個有序的項目集合,所有的項目都需要是相同的數據類型。
然而,與其它編程語言不同,數組在 Python 中不是一個內置的數據結構。Python 使用列表取代傳統的數組。
列表本質上是動態數組,是 Python 中最常見的和最強大的數據結構之一。
你可以把它們想象成有序的容器。它們將同類相關的數據存儲和組織在一起。
存儲在一個列表中的元素可以是任何數據類型。
可以有整數列表、浮點數列表、字元串列表,以及任何其它內置 Python 數據類型的列表。
儘管列表有可能只容納相同數據類型的項目,但它們比傳統的數組更靈活。這意味著在同一個列表中可以有各種不同的數據類型。
列表有 0 個或更多的項目,這意味著也可以有空的列表。在一個列表中,也可以有重覆的值。
值之間用逗號隔開,用方括弧 [] 把值括起來。
如何在 Python 中創建列表
要創建一個新的列表,首先給這個列表起一個名字。然後添加賦值運算符(=)和一對有開頭和結尾的方括弧。在方括弧內添加你希望列表包含的值。
#創建一個包含名字的新列表
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
#將列表列印到控制台
print(names)
#輸出
#['Jimmy', 'Timmy', 'Kenny', 'Lenny']
在 Python 中列表是如何被索引的
列表為每個項目保持一個順序。
集合中的每個項目都有一個自己的索引號,你可以用它來訪問這個項目本身。
Python(以及其它現代編程語言)中的索引從 0 開始,列表中的每一項的索引逐個增加。
例如,前面創建的列表有 4 個值:
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
列表中的第一個值,“Jimmy”,索引為 0。
列表中的第二個值,“Timmy”,索引為 1。
列表中的第三個值,“Kenny”,索引為 2。
列表中的第四個值,“Lenny”,索引為 3。
要通過索引號訪問列表中的一個元素,首先要寫出列表的名稱,然後在方括弧中寫出該元素索引,這是一個整數。
例如,如果你想訪問索引為 2 的元素,你應該這樣做:
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
print(names[2])
#output
#Kenny
2.Python 中的列表是可變的
在 Python 中,當對象是可變的時候,這意味著一旦它們被創建,其值就可以被改變。
列表是可變的對象,所以在它們被創建後,你可以更新和改變它們。
列表也是動態的,意味著它們可以在程式的整個生命周期中增長和縮小。
可以從現有的列表中刪除項目,也可以給現有的列表添加新的項目。
有一些內置的方法用於從列表中添加和刪除項目。
例如,要添加項目,有 .append()、.insert() 和 .extend() 方法。
要刪除項目,有 .remove()、.pop() 和 .pop(index) 方法。
.append() 方法的作用
.append() 方法在一個已經存在的列表的末尾添加一個額外的元素。
語法看起來像這樣:
list_name.append(item)
讓我們把它分解一下:
- list_name 是你給列表起的名字。
- .append() 是列表方法,用於在 list_name 的末尾添加一個項目。
- item 是你要添加的指定的單獨項目。
使用 .append() 時,原始列表被修改,不創建新的列表。
如果你想在先前創建的列表中添加一個額外的名字,你可以這樣做:
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
#在列表的末尾添加名字 Dylan
names.append("Dylan")
print(names)
#output
#['Jimmy', 'Timmy', 'Kenny', 'Lenny', 'Dylan']
.append() 和 .insert() 方法之間有什麼區別
這兩個方法的區別是:.append() 在列表的末尾添加一個項目,而 .insert() 在列表的指定位置插入一個項目。
正如你在上一節看到的,.append() 將把你作為參數傳遞給函數的項目始終添加到列表的末尾。
如果你不想只是將項目添加到列表的末尾,你可以用 .insert() 指定你想添加的位置。
一般的語法是這樣的:
list_name.insert(position,item)
讓我們把它分解一下:
- list_name 是列表的名稱。
- .insert() 是列表方法,用於在列表中插入一個項目。
- position 是該方法的第一個參數。它總是一個整數——具體地說,它是你希望新項目被放置的位置的索引號。
- item 是該方法的第二個參數。在這裡你指定你想添加到列表中的新項目。
例如,假設你有以下的編程語言列表:
programming_languages = ["JavaScript", "Java", "C++"]
print(programming_languages)
#output
#['JavaScript', 'Java', 'C++']
如果你想在列表的開始插入 “Python”,作為列表的一個新項,你可以使用 .insert() 方法,並指定位置為 0(記住,列表的第一個值的索引總是 0)。
programming_languages = ["JavaScript", "Java", "C++"]
programming_languages.insert(0, "Python")
print(programming_languages)
#output
#['Python', 'JavaScript', 'Java', 'C++']
如果你想讓 “JavaScript” 成為列表中的第一個項目,然後添加 “Python” 作為新的項目,你會指定位置為 1:
programming_languages = ["JavaScript", "Java", "C++"]
programming_languages.insert(1,"Python")
print(programming_languages)
#output
#['JavaScript', 'Python', 'Java', 'C++']
與 .append() 方法相比,.insert() 方法給了你更多的靈活性,前者只在列表的末尾添加一個新項目。
.append() 和 .extend() 方法之間有什麼區別
如果你想一次向列表中添加多個項目,而不是一次添加一個,怎麼辦?
你可以使用 .append() 方法在一個列表的末尾添加多個項目。
假設你有一個只包含兩種編程語言的列表:
programming_languages = ["JavaScript", "Java"]
print(programming_languages)
#output
#['JavaScript', 'Java']
然後你想在它的最後再增加兩種語言。
在這種情況下,你傳遞一個包含你想添加的兩個新值的列表,作為 .append() 的一個參數:
programming_languages = ["JavaScript", "Java"]
#在列表的末尾添加兩個新項目
programming_languages.append(["Python","C++"])
print(programming_languages)
#output
#['JavaScript', 'Java', ['Python', 'C++']]
如果你仔細看看上面的輸出,['JavaScript', 'Java', ['Python', 'C++']],你會發現一個新的列表被添加到已經存在的列表的末尾。
所以,.append() 在一個列表中添加了一個列表。
列表是對象,當你使用 .append() 將另一個列表添加到一個列表中時,新的項目將作為一個單獨的對象(項目)被添加。
假設你已經有兩個列表,像這樣:
names = ["Jimmy", "Timmy"]
more_names = ["Kenny", "Lenny"]
如果想把兩個列表的內容合二為一,把 more_names 的內容加入到 names 中,會怎麼樣?
當 .append() 方法被用於此目的時,另一個列表會在 names 中被創建:
names = ["Jimmy", "Timmy"]
more_names = ["Kenny", "Lenny"]
#將 more_names 的內容添加到 names
names.append(more_names)
print(names)
#output
#['Jimmy', 'Timmy', ['Kenny', 'Lenny']]
所以,.append() 通過將對象追加到最後,將新的元素作為另一個列表添加。
要真正將列表連接(添加)在一起,並將一個列表中的所有項目合併到另一個列表,你需要使用 .extend() 方法。
一般的語法是這樣的:
list_name.extend(iterable/other_list_name)
讓我們把它分解一下:
- list_name 是其中一個列表的名稱。
- .extend() 是將一個列表的所有內容添加到另一個列表的方法。
- iterable 可以是任何可迭代的東西,比如另一個列表,例如 another_list_name。在這種情況下,another_list_name 是一個列表,它將與 list_name 連接,其內容將作為單獨的項目被逐一添加到 list_name 的末尾。
因此,拿前面的例子來說,當 .append() 被替換為 .extend() 時,輸出結果將是這樣的:
names = ["Jimmy", "Timmy"]
more_names = ["Kenny", "Lenny"]
names.extend(more_names)
print(names)
#output
#['Jimmy', 'Timmy', 'Kenny', 'Lenny']
當我們使用 .extend() 時,名字列表得到擴展,其長度增加了 2。
.extend() 的工作方式是,它將一個列表(或其他可迭代的)作為參數,對每個元素進行迭代,然後將可迭代的每個元素添加到列表中。
.append() 和 .extend() 之間還有一個區別。
當你想添加一個字元串時,如前面所見,.append() 將整個單一項目添加到列表的末尾:
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
#將名字 Dylan 添加到列表的末尾
names.append("Dylan")
#Python小白學習交流群:711312441
print(names)
#output
#['Jimmy', 'Timmy', 'Kenny', 'Lenny', 'Dylan']
如果你用 .extend() 將一個字元串添加到一個列表的末尾,那麼字元串中的每個字元都會作為一個單獨的項目被添加到列表中。
這是因為字元串是可迭代的,而 .extend() 是對傳遞給它的可迭代參數進行迭代。
因此,上面的例子看起來將是像這樣的:
names = ["Jimmy", "Timmy", "Kenny", "Lenny"]
#給 .extend() 傳遞一個字元串(可迭代的)
names.extend("Dylan")
print(names)
#output
#['Jimmy', 'Timmy', 'Kenny', 'Lenny', 'D', 'y', 'l', 'a', 'n']
總結
總而言之,.append() 方法用於在現有列表的末尾添加一個項目,而不創建一個新的列表。
當它用於將一個列表添加到另一個列表時,它在一個列表中創建一個列表。