2016-03-26 14 views
0

Ancak, yeni değiştirdiğimde, self.marker değerini de değiştirir. Ben, self.marker değiştirmeden yeni değiştirebilmek istiyorum. Ben de derinlemesine kullanamıyorum, çünkü bu operasyonu birkaç bin defa yapıyorum ve derin bir kopyasını kullanmak için büyük bir performans cezasına çarpıyorum.İçeriğini değiştirmeden bir listenin bir kopyasını nasıl yaparım?

Ne yapabilirim?

+8

Derin bir kopyasını istiyorsanız, derin bir kopyasını yapmanız gerekir. Ve evet, derin kopyalar pahalı olabilir. Gerçekten ne yapmaya çalışıyorsun? (Bu bir XY sorunu olduğunu düşünüyorum) – Claudiu

+0

İki seviyeli bir kopyasını yapmak için not edelim 'new = [l [:] için l in self._marker]' – Claudiu

+0

@Claudiu özniteliğimin bir kopyasını yapmaya çalışıyorum _marker böylece kopyayı kullanabilirim ve değiştirebilirim, ama bir dahaki sefere, self.marker'ın aynı kalmasını istiyorum ve – Randomuser123

cevap

0

Doğru yoldasınız, ancak önerilen çözüm işe yaramıyor çünkü iç listelerin bir kopyasını almıyorsunuz. Aynı kalıyorlar.

Bunu yapabilirsin:

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

Eğer bu durumda gerekenler Bu Gösteriliyor bir deepcopy.

Bu, sorduğunuz soruyu yanıtlar. Başka gereksinimleriniz varsa, bunları sorunuzda açık bir şekilde yapmanız gerekir.

+0

OP zaten bu cevabı bir yorumda (şimdi silindi) cevabına – Claudiu

+0

cevabını reddetti. – DevShark

+0

Elbette, ama bu, derinin yapacağı şeyin aynısını yapar ve aynı sorundan muzdariptir. Ayrıca zaten [yorumlarda] (http://stackoverflow.com/questions/36237712/how-do-i-make-a-copy-of-a-list-without-changing-its-contents/36238470?noredirect = 1 # comment60105870_36237712). – Claudiu

İlgili konular