在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相关问答推荐

像计数不显示在html和想知道如果我的模型设置正确

如何将多个字典合并到一个列中,并为不同的行使用相同的键

如何将值映射到具有上限和下限的新列

从一列字符串中提取子字符串并将它们放入列表中

转换Pandas 数据框 - 添加行

Pandas 将列格式化为货币

如何禁用 pylint 禁止自用警告?

'~'(波浪号)运算符在 Python 中的应用

如何在 Spyder 控制台中使用变量执行 Python 3.3 脚本?

在计算之前删除包含某些值的组合

Python configparser 不会接受没有值的键

使用 Tensorflow 2.0 在 MNIST 上实现自定义神经网络?

接收导入错误:没有名为 *** 的模块,但有 __init__.py

如何在 jupyter notebook 5 中逐行分析 python 3.5 代码

如何区分文件之类的对象和文件路径之类的对象

如何为 Python 3.x 安装 psycopg2?

在 Keras 中训练神经网络的零精度

如何在 Python 3.4 中使用 pip 3?

如何从集合中删除多个元素?

在 Meta 中创建具有动态模型的通用序列化程序