切片时是否在numpy ND数组中创建了新对象?

cmssoen2  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(260)

在numpy中,如果我们有一个nD数组,然后我们有同一个nD数组的多个切片,那么如果我们在其中一个切片中进行更改,那么它将反映在所有切片中[即没有创建新对象],那么为什么如果我们检查这些切片的id(),它们会出现不同?
例如:

  1. import numpy as np
  2. a = np.array([10,20,30,40,50,60,70,80,90])
  3. b = a[:5]
  4. c = a[2:6]
  5. d = a[3:7]
  6. a
  7. array([10, 20, 30, 40, 50, 60, 70, 80, 90])
  8. b
  9. array([10, 20, 30, 40, 50])
  10. c
  11. array([30, 40, 50, 60])
  12. d
  13. array([40, 50, 60, 70])
  14. a[3]=9999
  15. a
  16. array([ 10, 20, 30, 9999, 50, 60, 70, 80, 90])
  17. b
  18. array([ 10, 20, 30, 9999, 50])
  19. c
  20. array([ 30, 9999, 50, 60])
  21. d
  22. array([9999, 50, 60, 70])
  23. id(a)
  24. 1592350341040
  25. id(b)
  26. 1592350341424
  27. id(c)
  28. 1592353526704
  29. id(d)
  30. 1592750164944

个字符

o8x7eapl

o8x7eapl1#

这是因为切片也可以被认为是“视图”。它们都是你计算机上同一个实际内存中的不同视图。
因此,如果您通过一个视图更改该内存的内容,其他视图将反映该更改。
然而,它们是不同的视图,因此它们对id有不同的结果。

相关问题