首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy切片与列表切片

Numpy切片与列表切片
EN

Stack Overflow用户
提问于 2021-05-17 20:07:42
回答 1查看 55关注 0票数 0

我的清单:

代码语言:javascript
复制
a=[1,2,3,4,5]

b=a[:]

id(a)
>>2181314756864

id(b)
>>2181314855232 (different as slicing creates a new object)

id(a[0])
>>140734633334432

id(b[0])
>>140734633334432 (same)

b[0]=-1

b
>>[-1,2,3,4,5]

a
>>[1,2,3,4,5]  --perfectly fine

但是在numpy的情况下:

代码语言:javascript
复制
import numpy as np

l=np.array([1,2,3,4,5])

p=l[:]

id(l)
>>2181315005136

id(p)
>>2181315019840 (different as it creates a new object, which is fine)

id(l[0])

>>2181314995440

id(p[0])
>>2181314995952 (different)

但是:

代码语言:javascript
复制
p[0]=-1

p
>>array([-1,2,3,4,5])

l

>>array([-1,2,3,4,5])

尽管numpy数组的第一个元素的内存地址不同,但l也在更新。有人能解释一下这背后的概念吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-17 20:56:34

id作为内存地址来讨论有点转移话题。是的,在CPython中,它恰好是一个内存地址,但是什么的地址呢?碰巧不是实际的数字数据,而是描述数字数据的Python对象!

numpy中的切片创建了一个新的Python对象(因此有一个不同的id),但新对象与旧对象共享实际数组的存储空间。

如果是id(A) == id(B),那么,例如,A.shape不可能与B.shape不同!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67569368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档