Python数组元素赋值

2024-05-16 13:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python中关于数组变量赋值的一个简单例子感到困惑,希望有人能帮我检查一下。你知道吗

在我的理解中,如果a是一个列表,b只是复制了a的引用,当你编辑b时,a也会被修改。同时,您可以使用is操作符来检查它们的id。例如:

a = ["a", ["a", "b"]]
b = a[1]
b.append("c")

然后,当我使用

In [7]: b is a[1]
Out[7]: True

但是,如果a和b是数组

import numpy as np
a = np.identity(3)
b = a[0, :]

之后,当我使用is检查时,它返回False,但是当我编辑b时,a也会被修改:

In [14]: b is a[1]
Out[14]: False
In [15]: a
Out[15]:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
In [16]: b
Out[16]: array([0., 1., 0.])
In [17]: b *= 2
In [18]: b
Out[18]: array([0., 2., 0.])
In [19]: a
Out[19]:
array([[1., 0., 0.],
       [0., 2., 0.],
       [0., 0., 1.]])

基本上,我认为如果is返回False,变量将有不同的id和引用,这意味着它们是独立的,但现在似乎不对,有人能帮我检查一下吗?你知道吗

非常感谢!你知道吗


Tags: inidfalsetrue编辑列表isnp
2条回答

访问数组的切片将创建一个视图。ba[0,:]是不同的视图,即使它们查看的是数组的相同部分a,因此即使它们的底层引用相同,它们的id值也是不同的。你知道吗

对象的id在技术上与它所引用的不同,因此具有相同id的对象将引用相同的数据,但是具有相同引用的对象不一定具有相同的id

Numpy数组的工作方式与Python列表不同。在您的示例中,b是a的第一行的numpy视图,它与指向第一个元素a的指针不同

顺便说一下,您可以通过执行id(b)id(a[0])来检查每个变量的id。你知道吗

相关问题 更多 >