Python 变量赋值

Python variabale assignment

问候程序员,

我有一个特定的问题要问 - 更准确地说是 python 在分配变量时的行为。让我们假设这段代码(取自 Tensorflow 的指南):

(train_images, train_labels), (test_images, test_labels) = keras.datasets.fashion_mnist.load_data()

我明白,我不能做以下事情:

train_images /= 250.0

-对象 train_images 不可写,因此我无法更改它。

但我绝对可以做以下,我不明白:

train_images = train_images / 250.0

这是否意味着当我 "re-assign" 变量 train_images 时,python 以某种方式自动忘记旧变量并将 train_images 构造为新变量?

请原谅我缺乏 python 的行为知识 - 如果有明显的答案,只需 post 一些 link 解释或描述此案例的一些文档。

非常感谢,祝您愉快!

编辑:

"non-writeable" 我的意思是该对象是只读的(当我们打印数组的描述 print( train_images.flags ) 时,我们从 WRITEABLE : False

更具体地说,当使用 train_images /= 250.0 时,程序终止并输出以下错误:

Traceback (most recent call last): File "code_01_fashion.py", line 31, in <module> train_images /= 250.0 ValueError: output array is read-only

另一方面,train_images = train_images / 250.0 运行得很好。

重要的是要知道这不是香草 python。 Keras.datasets.fashion_mnist.load_data() returns 一个 NumPy 数组。 (NumPy 是科学计算的基础包 Python。About NumPy

可以为 写入 禁用 numpy 数组。 Details

当您使用就地运算符 (x /=250.0) 时,您明确要求修改您的对象,但在这种情况下您是不允许的。

如果你想检查你的 NumPy 数组是否可写,你可以 运行:

>> train_images.flags

并检查 WRITEABLE

中的布尔值
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : False
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

当你在做类似的事情时:

train_images = train_images / 250.0

类似于:

temp = train_images / 250.0
train_images = temp

因此,在这种情况下,您正在创建一个新对象并重新分配变量。