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

问题描述 投票:0回答:1

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

例如::

import numpy as np
a = np.array([10,20,30,40,50,60,70,80,90])
b = a[:5]
c = a[2:6]
d = a[3:7]
a
array([10, 20, 30, 40, 50, 60, 70, 80, 90])
b
array([10, 20, 30, 40, 50])
c
array([30, 40, 50, 60])
d
array([40, 50, 60, 70])
a[3]=9999
a
array([  10,   20,   30, 9999,   50,   60,   70,   80,   90])
b
array([  10,   20,   30, 9999,   50])
c
array([  30, 9999,   50,   60])
d
array([9999,   50,   60,   70])
id(a)
1592350341040
id(b)
1592350341424
id(c)
1592353526704
id(d)
1592750164944
                            .
python-3.x numpy numpy-ndarray
1个回答
0
投票

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

不同的观点,因此他们对于

id

有不同的结果。


© www.soinside.com 2019 - 2024. All rights reserved.