# 這個問題超重要!因為「複製串列」在 Python 裡有深淺拷貝的差異,用錯會讓你改到 A 時 B 也被改,要一步步講清楚 ✅
# 包含二維串列的拷貝也在最後面
# 🎯 目標:把串列 A 的內容複製到 B,讓兩個串列彼此不影響
# ✅ 最推薦:用 切片 或 copy()(淺拷貝)
A = [1, 2, 3]
B = A[:] # 方法1:切片方式複製
# 或
B = A.copy() # 方法2:使用 list 的 copy 方法
# 這樣 A 和 B 是兩個獨立的串列,但內容一樣。
# ⚠️ 錯誤寫法(不是真的複製):
B = A # ❌ 這只是「指向同一個記憶體位置」
# 這種寫法只會讓 B 是 A 的另一個名字(alias),你改一個,兩個都變!
B[0] = 999
print(A) # → A[0] 也變成 999 ❗️
# 🧠 小技巧補充(淺拷貝 vs 深拷貝)
# 如果 A 是一維串列,用 [:] 或 .copy() 就夠了 ✅
# 但如果是二維串列(像是表格或矩陣),那你要用「深拷貝」:
# ✅ 深拷貝用法(for 二維串列)
# 方法一:用 copy.deepcopy()
import copy
A = [[1, 2], [3, 4]]
B = copy.deepcopy(A)
# 方法二:自寫 for 迴圈複製每一列
A = [[1, 2], [3, 4]]
B = [row[:] for row in A]
# 這樣 A[0][0] 和 B[0][0] 是完全分離的!
# ✅ 快速總整理表
# 目的 寫法 是否真的複製? 說明
# ❌ 不正確複製 B = A 否 ❌ 指向同一塊記憶體
# ✅ 一維正確複製 B = A[:] 或 A.copy() 是 ✅ 拷貝值
# ✅ 二維正確複製 copy.deepcopy(A) 或 [row[:] for row in A] 是 ✅ 完整複製每層