python 数组赋值后 内存区域是不是同一片_python – numpy数组赋值问题

这其实根本不是问题;它是数组(和其他对象)在Python中工作的方式。

想像这样:您在代码示例中创建的数组是位于内存中某个位置的对象。但是你不能在程序中使用它来告诉Python在内存中去寻找它;你必须给它一个名字。当你写的时候

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

您正在创建数组并创建引用它的名称a。从那时起,Python知道a指的是“内存地址0x123674283”(或任何)。 Python运行时中有一个内部表(如果我记得正确,称为“符号表”),因为在上述代码行运行之后,该表将包含

...,

'a' : 0x123674283,

...

当您将一个变量的值分配给另一个变量时

b = a

Python不会复制整个数组,因为如果它是一个大数组,那将需要很长时间。相反,它转到符号表,并将a的内存地址复制到表b中的新行。所以你结束了

...,

'a' : 0x123674283,

...,

'b' : 0x123674283,

...

所以你看到,a和b实际上是指内存中相同的位置,即同一个对象。对一个人的任何改变都会反映在另一个中,因为它们只是同一个东西的两个名字。

如果要实际制作数组的副本,则必须调用一个明确的方法。 Numpy数组有一个复制方法,您可以仅为此目的使用。所以如果你写的

b = a.copy()

那么Python将首先实际创建一个数组的副本 – 也就是说,它放置一个新的内存区域,我们假设地址为0x123904381​​,然后转到内存地址0x123674283,并从内存的后面部分复制数组的所有值到前者。所以你有相同的内容坐在两个不同的地方记忆。

...,

'a' : 0x123674283,

...,

'b' : 0x123904381,

...

现在,当您更改b的元素之一时,该更改将不会显示在a中,因为a和b不再引用计算机内存的相同部分。由于阵列数据有两个独立的副本,您可以更改一个而不影响另一个。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值