首頁 > 後端開發 > Python教學 > 如何建立 Python 清單的真實副本以避免意外修改?

如何建立 Python 清單的真實副本以避免意外修改?

Linda Hamilton
發布: 2024-12-21 02:27:09
原創
739 人瀏覽過

How Can I Create a True Copy of a Python List to Avoid Unintentional Modifications?

複製未更改分配的清單:綜合指南

在 Python 中,使用 new_list = my_list 將清單指派給新變數不是正版。相反,會建立對原始清單的引用。因此,對新清單的修改也會改變原始清單。

為了防止這些意外更改,複製或複製清單至關重要。以下是幾種方法:

  • 內建 list.copy() 方法:(Python 3.3且稍後)
new_list = old_list.copy()
登入後複製
  • 切片:
new_list = old_list[:]
登入後複製
  • 內建清單()建構子:
new_list = list(old_list)
登入後複製
  • 通用copy.copy():
import copy
new_list = copy.copy(old_list)
登入後複製
  • Generic copy.deepcopy():(嵌套複製elements)
import copy
new_list = copy.deepcopy(old_list)
登入後複製

考慮一個帶有嵌套列表和實例的範例:

class Foo(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return f'Foo({self.val!r})'

foo = Foo(1)

a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)

a.append('baz')  # Modify original list
foo.val = 5  # Modify nested instance

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')
登入後複製

輸出:

original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]
登入後複製

如您所見,雖然原始清單和巢狀實例發生了變化,但只有深度複製(f)準確地複製了它們,並保留了先前的值。

以上是如何建立 Python 清單的真實副本以避免意外修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板