1
A
回答
7
這是一個淺拷貝,但在這種情況下,有一個沒有任何區別淺層和深層複製,因爲列表中的整數是不可變的。事實上,它們都足夠小,標準Python解釋器(cpython)將緩存它們(每個1
是相同的對象),因此深拷貝將具有與淺拷貝相同的內容(內容將是相同的身份,不只是價值)。
3
該行執行列表y
的淺表副本:
y = y + []
爲什麼你認爲這將是一個深拷貝?
但由於整數是原子和不可變的,術語「複製」並不適用。就你的例子而言,這根本就沒有關係。如果y
包含一些對象,是的,那麼它是一個淺拷貝,因爲包含的元素不會被複制。
爲模塊「複製」 Python的手冊包含了您需要了解淺和深拷貝之間的差別的所有信息:https://docs.python.org/3/library/copy.html
1
我不會打電話給你在做什麼複製操作。您正在構建一個新列表y + []
並將其分配到名稱y
。使用列表上的時候
的+
操作不會複製任何東西,所以在y
的項目和項目在x
將是相同的(如在字面上內存相同的對象)。
無論任何列表的內容是否可變,這都成立,不應將可變性引入本討論。
>>> x = [1,2,3,4,5,6]
>>> y = x
>>> y = y +[]
>>> all(a is b for a,b in zip(y,x))
True
>>> x = [[1], [2]]
>>> y = x
>>> y = y + []
>>> all(a is b for a,b in zip(y,x))
True
提防與可變元素打交道時的唯一的事情就是改變任何可變元素,將會在保持對它們的引用的所有容器中可以看出。
>>> y[0][0] = 3
>>> x
[[3], [2]]
相關問題
- 1. 淺拷貝或深拷貝?
- 2. Java ArrayList的拷貝構造函數是淺拷貝還是深拷貝?
- 3. 淺拷貝和深拷貝在C
- 4. 淺拷貝和深拷貝示例
- 5. JS:是否Object.assign()創建深拷貝和淺拷貝
- 6. std :: map的淺/深拷貝
- 7. 淺拷貝
- 8. Javascript淺拷貝
- 9. 爲什麼懶的拷貝時我們有深拷貝和淺拷貝?
- 10. 懶惰的拷貝 - 如何從淺拷貝創建深層拷貝
- 11. 方法Array.Clone是淺拷貝?
- 12. 硬拷貝vs淺拷貝javascript
- 13. 深拷貝父母及其子女,淺拷貝child.parent引用
- 14. Java的克隆 - 深拷貝和淺拷貝
- 15. 使用追加方法的Python淺拷貝和深拷貝
- 16. python列表複製是深拷貝還是淺拷貝,它是如何完成的?
- 17. 深拷貝userControl
- 18. 深拷貝
- 19. 這是測試淺層還是深層拷貝的適當方法?
- 20. 矢量STD C++ - 深或淺拷貝
- 21. 蟒蛇list.copy淺VS深拷貝
- 22. 結構深拷貝
- 23. NSManagedObjects深拷貝NSMutableArray
- 24. java的深拷貝
- 25. DPDK mbuf深拷貝
- 26. 深拷貝ASP.NET GridView
- 27. 深拷貝(鏈表)
- 28. 深拷貝在Python
- 29. 深拷貝在Python
- 30. 什麼是數組的淺拷貝
隱式副本從來不是Python中的深層副本。 –
這是一個淺拷貝。通常會使用'y = x [:]'或'y = list(x)'來創建副本。 –