首頁 > 後端開發 > Python教學 > 如何在 Python 中建立清單的不可變副本?

如何在 Python 中建立清單的不可變副本?

Mary-Kate Olsen
發布: 2024-12-24 03:37:14
原創
807 人瀏覽過

How Can I Create an Immutable Copy of a List in Python?

建立不可變清單副本

在Python 中,在分配諸如new_list = my_list 之類的清單引用時,對new_list 的修改會意外影響my_list。發生這種情況是因為 Python 不是建立不同的新列表,而是只是複製對實際列表的引用,導致 new_list 和 my_list 都指向同一個列表。

為了解決這個問題並防止意外更改,必須使用各種方法建立清單的真實副本。

複製清單

取得不可變的複製或清單的淺表副本,請考慮以下選項:

  • list .copy() 方法(Python 3.3 ):
new_list = old_list.copy()
登入後複製
  • 列表切片:
new_list = old_list[:]
登入後複製
  • list建構子:
new_list = list(old_list)
登入後複製

深度複製清單

如果需要複製清單的元素也使用深度複製:

import copy
new_list = copy.deepcopy(old_list)
登入後複製

範例

考慮以下程式碼:

import copy

class Foo:
    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)

# edit orignal list and instance 
a.append('baz')
foo.val = 5

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)]
登入後複製
這示範如何對原始列表及其實例的修改僅影響原始列表,而不影響其複製版本(b、c、d 和 f)。

以上是如何在 Python 中建立清單的不可變副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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