1

私はプログラミングとPythonに不慣れです。私が抱えている問題は、カスタムクラスのインスタンスであるリスト要素を削除することです。

import copy

class some_class:
    pass

x = some_class()
x.attr1 = 5
y = some_class()
y.attr1 = 5

z = [x,y]
zcopy = copy.deepcopy(z)
z.remove(zcopy[0])

これは次を返します:ValueError:list.remove(x):xはリストにありません

ディープコピーされたリストからの参照を使用してリストから要素を削除する簡単な方法はありますか?

編集:あなたの答えをありがとう。インデックスを使用して解決策を見つけました。それはきれいではありませんが、それは仕事をします:

import copy

class some_class:
    pass

x = some_class()
x.attr1 = 5
y = some_class()
y.attr1 = 5

z = [x,y]
zcopy = copy.deepcopy(z)
del z[zcopy.index(zcopy[0])]
4

1 に答える 1

1

いいえ、への呼び出しはインスタンスdeepcopyのコピーを作成するためです。some_classそのコピーzcopy[0]は元のオブジェクトとは異なるため、リストz[0]から削除しようとすると、コピーが元のリストに存在しないと不平を言うのは当然です。さらに、 の目的である、コピーされたオブジェクトと元のオブジェクトの間にリンクはありません。zcopy[0]zdeepcopy

__deepcopy__元のオブジェクトへの参照を維持するコピーを返すメソッドをクラスに実装できると思います。z[0]次に、その参照を使用して、コピーから元のオブジェクト を取得できますzcopy[0]。しかし、それはかなり奇妙なことだと思いますが、おそらく良い考えではありません。詳細な情報がなければ、copy.copy代わりに を使用することをお勧めしcopy.deepcopyます。

于 2010-08-10T19:38:28.093 に答える