From 41e3c00b61af68d65ebb5402b23f4b26b4628ffb Mon Sep 17 00:00:00 2001 From: krahets Date: Sun, 1 Dec 2024 03:00:38 +0800 Subject: [PATCH] Sync zh and zh-hant versions. --- .../docs/chapter_array_and_linkedlist/summary.md | 14 ++++++++++++-- zh-hant/docs/chapter_introduction/summary.md | 2 +- zh-hant/docs/chapter_introduction/what_is_dsa.md | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/zh-hant/docs/chapter_array_and_linkedlist/summary.md b/zh-hant/docs/chapter_array_and_linkedlist/summary.md index e8eeee5dd..7df5b5e74 100644 --- a/zh-hant/docs/chapter_array_and_linkedlist/summary.md +++ b/zh-hant/docs/chapter_array_and_linkedlist/summary.md @@ -71,6 +71,16 @@ 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 `stack` 和 `queue` ,而非鏈結串列。 -**Q**:初始化串列 `res = [0] * self.size()` 操作,會導致 `res` 的每個元素引用相同的位址嗎? +**Q**:操作 `res = [[0]] * n` 生成了一個二維串列,其中每一個 `[0]` 都是獨立的嗎? -不會。但二維陣列會有這個問題,例如初始化二維串列 `res = [[0]] * self.size()` ,則多次引用了同一個串列 `[0]` 。 +不是獨立的。此二維串列中,所有的 `[0]` 實際上是同一個物件的引用。如果我們修改其中一個元素,會發現所有的對應元素都會隨之改變。 + +如果希望二維串列中的每個 `[0]` 都是獨立的,可以使用 `res = [[0] for _ in range(n)]` 來實現。這種方式的原理是初始化了 $n$ 個獨立的 `[0]` 串列物件。 + +**Q**:操作 `res = [0] * n` 生成了一個串列,其中每一個整數 0 都是獨立的嗎? + +在該串列中,所有整數 0 都是同一個物件的引用。這是因為 Python 對小整數(通常是 -5 到 256)採用了快取池機制,以便最大化物件複用,從而提升效能。 + +雖然它們指向同一個物件,但我們仍然可以獨立修改串列中的每個元素,這是因為 Python 的整數是“不可變物件”。當我們修改某個元素時,實際上是切換為另一個物件的引用,而不是改變原有物件本身。 + +然而,當串列元素是“可變物件”時(例如串列、字典或類別例項等),修改某個元素會直接改變該物件本身,所有引用該物件的元素都會產生相同變化。 diff --git a/zh-hant/docs/chapter_introduction/summary.md b/zh-hant/docs/chapter_introduction/summary.md index 501abf9e3..fb68076a1 100644 --- a/zh-hant/docs/chapter_introduction/summary.md +++ b/zh-hant/docs/chapter_introduction/summary.md @@ -5,7 +5,7 @@ - 整理撲克的過程與插入排序演算法非常類似。插入排序演算法適合排序小型資料集。 - 貨幣找零的步驟本質上是貪婪演算法,每一步都採取當前看來最好的選擇。 - 演算法是在有限時間內解決特定問題的一組指令或操作步驟,而資料結構是計算機中組織和儲存資料的方式。 -- 資料結構與演算法緊密相連。資料結構是演算法的基石,而演算法是資料結構發揮作用的舞臺。 +- 資料結構與演算法緊密相連。資料結構是演算法的基石,而演算法為資料結構注入生命力。 - 我們可以將資料結構與演算法類比為拼裝積木,積木代表資料,積木的形狀和連線方式等代表資料結構,拼裝積木的步驟則對應演算法。 ### Q & A diff --git a/zh-hant/docs/chapter_introduction/what_is_dsa.md b/zh-hant/docs/chapter_introduction/what_is_dsa.md index 24d5db0e4..5f135eaa6 100644 --- a/zh-hant/docs/chapter_introduction/what_is_dsa.md +++ b/zh-hant/docs/chapter_introduction/what_is_dsa.md @@ -26,7 +26,7 @@ 如下圖所示,資料結構與演算法高度相關、緊密結合,具體表現在以下三個方面。 - 資料結構是演算法的基石。資料結構為演算法提供了結構化儲存的資料,以及操作資料的方法。 -- 演算法是資料結構發揮作用的舞臺。資料結構本身僅儲存資料資訊,結合演算法才能解決特定問題。 +- 演算法為資料結構注入生命力。資料結構本身僅儲存資料資訊,結合演算法才能解決特定問題。 - 演算法通常可以基於不同的資料結構實現,但執行效率可能相差很大,選擇合適的資料結構是關鍵。 ![資料結構與演算法的關係](what_is_dsa.assets/relationship_between_data_structure_and_algorithm.png)