python - Python数组元素赋值
问题描述
我对 Python 中一个关于数组变量赋值的简单案例感到困惑,希望有人能帮我检查一下。
在我的理解中,如果a是一个列表,b只是复制了a的引用,当你编辑b时,a也会被修改。同时,您可以使用is
运算符来检查他们的 id。例如:
a = ["a", ["a", "b"]]
b = a[1]
b.append("c")
然后,它会返回True
,当我使用
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 和引用,这意味着它们是独立的,但现在似乎不对,有人可以帮我检查一下吗?
非常感谢!
解决方案
访问数组的一部分会创建一个视图。b
并且a[0,:]
是不同的视图,即使它们查看数组的相同部分a
,所以即使它们的基础引用相同,它们的 id 值也是不同的。
对象的 id 在技术上与其引用的对象不同,因此具有相同 id 的对象将引用相同的数据,但具有相同引用的对象不一定具有相同的 id
推荐阅读
- reactjs - 从 Next.js 项目中的任何地方访问 Socket.io
- haskell - Idris `foldl` 默认实现
- python - 如何使我的 numpy 数组按轴唯一?
- laravel-5 - 使用身份验证中间件时未定义路由 [x]
- ios - 推动 segue 过渡真的很不稳定 iOS App swift
- python - 如何创建输入形状 = 输出形状的自动编码器模型
- c - 在测试我的冒泡排序算法时,控制台会在一秒钟后关闭
- javascript - 递归序列化对象
- javascript - 不和谐机器人如何向用户发送具有随机名称的文件?
- mongodb - 我想在 mongodb 中按月从 JAN-DEC 返回值的总和