在 Numpy 中,尤其是在做数组运算或数组操作时,返回结果不是数组的 副本 而是 视图
    在 Numpy 中,所有赋值运算不会为数组和数组中的任何元素创建副本。

    • numpy.ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。

    【例】

    1. import numpy as np
    2. x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
    3. y = x
    4. y[0] = -1
    5. print(x)
    6. # [-1 2 3 4 5 6 7 8]
    7. print(y)
    8. # [-1 2 3 4 5 6 7 8]
    9. x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
    10. y = x.copy()
    11. y[0] = -1
    12. print(x)
    13. # [1 2 3 4 5 6 7 8]
    14. print(y)
    15. # [-1 2 3 4 5 6 7 8]

    【例】数组切片操作返回的对象只是原数组的视图。

    1. import numpy as np
    2. x = np.array([[11, 12, 13, 14, 15],
    3. [16, 17, 18, 19, 20],
    4. [21, 22, 23, 24, 25],
    5. [26, 27, 28, 29, 30],
    6. [31, 32, 33, 34, 35]])
    7. y = x
    8. y[::2, :3:2] = -1
    9. print(x)
    10. # [[-1 12 -1 14 15]
    11. # [16 17 18 19 20]
    12. # [-1 22 -1 24 25]
    13. # [26 27 28 29 30]
    14. # [-1 32 -1 34 35]]
    15. print(y)
    16. # [[-1 12 -1 14 15]
    17. # [16 17 18 19 20]
    18. # [-1 22 -1 24 25]
    19. # [26 27 28 29 30]
    20. # [-1 32 -1 34 35]]
    21. x = np.array([[11, 12, 13, 14, 15],
    22. [16, 17, 18, 19, 20],
    23. [21, 22, 23, 24, 25],
    24. [26, 27, 28, 29, 30],
    25. [31, 32, 33, 34, 35]])
    26. y = x.copy()
    27. y[::2, :3:2] = -1
    28. print(x)
    29. # [[11 12 13 14 15]
    30. # [16 17 18 19 20]
    31. # [21 22 23 24 25]
    32. # [26 27 28 29 30]
    33. # [31 32 33 34 35]]
    34. print(y)
    35. # [[-1 12 -1 14 15]
    36. # [16 17 18 19 20]
    37. # [-1 22 -1 24 25]
    38. # [26 27 28 29 30]
    39. # [-1 32 -1 34 35]]