2016-03-26 52 views
0

但是,當我更改新的時候,它也會更改self._marker。我希望能夠改變新的,而不用改變self._marker。我也無法使用deepcopy,因爲我做了這個操作幾千次,並且使用深度拷貝會導致巨大的性能損失。如何在不更改其內容的情況下製作列表的副本?

我該怎麼辦?

+8

如果您想要深度複製,則必須進行深層複製。是的,深拷貝可能很昂貴。你真的想做什麼? (即我認爲這是一個XY問題) – Claudiu

+0

請注意,做一個副本兩層深你可以做'新= [l [:]爲self._marker]' – Claudiu

+0

@Claudiu我試圖複製我的屬性_marker,所以我可以使用該副本並進行變異,但下次我這樣做時,我希望self._marker保持不變,而不會改變 – Randomuser123

回答

0

您處於正確的軌道上,但是您提出的解決方案不起作用,因爲您沒有製作內部列表的副本。他們保持不變。

你可以這樣做:

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

這PERFORMA一個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#comment60105870_36237712)。 – Claudiu

相關問題