Python(Jupyter)“equals”赋值在RHS变量下游创建更改

2024-10-01 04:46:10 发布

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

我正在使用Jupyter笔记本用Python尝试以下代码:

import numpy as np

i=2
j=0

basis = np.matrix([False,False,True,True,True])
basis_mod = basis
print "basis"
print basis
print "basis_mod"
print basis_mod

basis_mod[:,i] = False
print "basis"
print basis
print "basis_mod"
print basis_mod

basis_mod[:,j] = True
print "basis"
print basis
print "basis_mod"
print basis_mod

控制台输出/打印内容是:

basis
[[False False  True  True  True]]
basis_mod
[[False False  True  True  True]]
basis
[[False False False  True  True]]
basis_mod
[[False False False  True  True]]
basis
[[ True False False  True  True]]
basis_mod
[[ True False False  True  True]] 

我的问题是:当我修改基差时,为什么要修改可变基差?为了清楚起见,我正在修改basis\u mod变量,所以我希望basis变量不会改变。但是,当我打印基变量时,它将变为等于基变量

请注意,如果我将代码更改为:

import numpy as np

i=2
j=0

basis = np.matrix([False,False,True,True,True])
basis_mod = np.matrix([False,False,True,True,True])
print "basis"
print basis
print "basis_mod"
print basis_mod

basis_mod[:,i] = False
print "basis"
print basis
print "basis_mod"
print basis_mod

basis_mod[:,j] = True
print "basis"
print basis
print "basis_mod"
print basis_mod

打印结果与预期一致:

basis
[[False False  True  True  True]]
basis_mod
[[False False  True  True  True]]
basis
[[False False  True  True  True]]
basis_mod
[[False False False  True  True]]
basis
[[False False  True  True  True]]
basis_mod
[[ True False False  True  True]]

因此,我怀疑问题出在line basis_mod=basis上,但我不明白为什么

非常感谢您的帮助!这主要是搞乱了我正在编写的一个算法


Tags: 代码importnumpymodfalsetrue内容as
2条回答

在python中,当您编写a=b时,实际上是将变量b引用到变量a,如果您对任何一个变量进行了更改,那么这些更改将自动应用到另一个变量。事实上,它们会变得完全相同,名字也会不同

a is b will output True

在处理数组或列表(这方面的任何可变数据结构)时,实际上是存储对该变量的引用

如果您希望basis保持不变,则需要创建basis的副本并将其存储在basis_mod

>>> import numpy

>>> basis = numpy.matrix([1, 2])
>>> basis_mod = basis
>>> basis_mod[0] = [3, 4]

>>> basis
matrix([[3, 4]])
>>> basis_mod
matrix([[3, 4]])

>>> basis_mod = basis.copy()
>>> basis_mod[0] = [5, 6]
>>> basis
matrix([[3, 4]])
>>> basis_mod
matrix([[5, 6]])

相关问题 更多 >