2016-03-26 28 views
0

しかし、私がnewを変更すると、self._markerも変更されます。 self._markerを変更せずに、新しいものを変更できるようにしたい。私はこの操作を数千回行うので、deepcopyを使用することはできません。また、deepcopyを使用すると大きなパフォーマンス上のペナルティが発生します。リストの内容を変更せずにコピーを作成するにはどうすればよいですか?

私は何をしますか?

+8

ディープコピーが必要な場合は、ディープコピーを作成する必要があります。そして、深いコピーは高価になる可能性があります。あなたは本当に何をしようとしていますか? (つまり、これはXYの問題だと思う) – Claudiu

+0

コピーを2レベル深くするには、 'self._markerのlに対してnew = [l [:]]' – Claudiu

+0

@Claudiu私の属性のコピーを作成しようとしている_markerので、私はコピーを使用して、それを変更することができますが、次回私は、self._markerを同じままにして、変更しないようにします – Randomuser123

答えて

0

適切なトラックにありますが、内部リストのコピーを作成しないため、提案されたソリューションは機能しません。彼らは同じままです。

あなたがこれを行うことができます:

new_list = [e[:] for e in self._marker] 

あなたが、その場合には必要なものである。このパフォーマdeepcopy。

これはあなたが質問した質問に答えます。他の要件がある場合は、あなたの質問に明示する必要があります。

+0

OPは(今削除された)回答 – Claudiu

+0

へのコメントでこの回答を既に拒否しました。 – DevShark

+0

確かに、それはdeepcopyと同じことをするので、同じ問題を抱えています。また、それはすでに[コメントの]です(http://stackoverflow.com/questions/36237712/how-do-i-make-a-copy-of-a-list-without-changing-its-contents/36238470?noredirect = 1#コメント60105870_36237712)。 – Claudiu

関連する問題