在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
                            .

推荐答案

这是因为切片也可以被认为是"视图".它们在您的计算机上都是different views到相同的实际memory.

因此,如果您通过一个视图更改该内存的内容,其他视图将反映该更改.

然而,他们有are种不同的观点,因此他们对id种观点有不同的结果.

Python-3.x相关问答推荐

使用魔方无法从图像中识别单个字符

正则表达式匹配并提取括号前的单词

TypeError:&Quot;Value&Quot;参数必须是标量、Dict或Series,但您传递了&Quot;Index&Quot;

根据另一列中的条件填写该列中的值

给定panda代码的分组和百分比分布pyspark等价

如何将项目添加到Python中具有固定大小的列表列表中

向前/向后移动导致移动行的数据不可见

Python.在循环中填充字典的问题

无法使用 Python 和 Selenium 检索 href 属性

从 yahoo Finance python 一次下载多只股票

为什么 setattr 在绑定方法上失败

TimescaleDB:是否可以从 Python 调用create_hypertable?

日志(log)模块不适用于 Python3

numpy.ndarray 与 pandas.DataFrame

在python中,如果一个函数没有return语句,它会返回什么?

python 3的蓝牙库

Python 3 - Zip 是 pandas 数据框中的迭代器

将列表列表转换为Python中的字典字典

为什么变量 = 对象不像变量 = 数字那样工作

在 macbook pro M1 上安装 Tensorflow 时出现zsh:非法硬件指令 python