在Python 3.x中的for循环中,对象是否被改变为不可变的?

2024-10-02 16:22:39 发布

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

在我的代码粘贴bellow(这是python3代码)中,我期望for循环更改原始对象(即我期望NSTEPx已被for循环更改)。由于列表和数组是可变的,我应该通过变量“data”引用对象来编辑它。但是,在运行了这段代码并调用了NSTEPx之后,它并没有被更改。有人能解释这是为什么吗?我来自C++的背景,而可变不变的对象的概念是我最近才理解的,或者我认为的细微差别。你知道吗

代码如下:

NSTEPx = np.array(NSTEPx)
TIMEx = np.array(TIMEx)
TEMPx = np.array(TEMPx)
PRESSx = np.array(PRESSx)
Etotx = np.array(Etotx)
EKtotx = np.array(EKtotx)
EPtotx = np.array(EPtotx)
VOLUMEx = np.array(VOLUMEx)
alldata = [NSTEPx,TIMEx,TEMPx, PRESSx, Etotx, EKtotx, EPtotx]
for data in alldata:
    temp = data[1001:-1]
    data = np.insert(data,0,temp)
    data = np.delete(data,np.s_[1001:-1])

Tags: 对象代码fordatanparraytimextempx
2条回答

Python没有赋值!data = value严格来说是一个绑定操作,而不是赋值。这在E.C++ +P>

Python变量就像一个标签,或者一个黄色的便签:你可以把它放在某物上,或者移到其他地方;它不会(从不)改变某物(对象)它是一个。 =-运算符确实移动标签;它“绑定”标签。虽然我们通常说赋值,但它实际上不是C的赋值(基本上是一个内存地址)

要在Python中更改值,需要一个方法:aLabel.do_update(),will(通常)changeself,即对象本身。 注意aList[....]是一个方法!你知道吗

因此,要更改数据:更改它(秒)。不要在其上放置其他标签,也不要在其他数据上放置现有标签!你知道吗

希望这能解释你的问题

在循环中,data引用数组(某个对象)。引用的对象是可变的。变量data也可以更改为引用其他内容,但这不会更改alldata(引用对象的值)中的内容或隐式复制其内容以构造alldata的变量。因此,您所更改的只是一个局部变量(隐式地从alldata复制)来引用新创建的数组。任何其他引用值都将保持不变,并且仍然引用旧数组。你知道吗

相关问题 更多 >