在 python 中将视图分配给同名与分配给新名称有什么好处吗?

Is there any benefit to assigning a view to same name vs to a new name in python?

假设我正在 python 对象上创建一个新视图,这是我接下来需要的唯一视图。将其分配给新名称与覆盖原始名称之间有什么区别吗?如果是,哪个更好?

例如,假设我有一些 numpy 数组 arr,并且以后只需要它的一些重塑版本。可以将新视图重新分配给 arr,还是我应该给它起一个新名称?

为清楚起见,示例:

import numpy as np

# some array
arr = np.zeros([100, 1])

# option 1
arr = arr.reshape(10, 10)

# option 2
arr_newview = arr.reshape(10, 10)

不,两者相同,因为python中没有预先声明变量。 Python 与 C++ 或 java 等其他编程语言的工作方式完全不同。 Python 当我们分配任何实际指向该特定数据的变量时,变量分配就像指针一样工作。

这是非常基于意见的,但我不同意现有的答案。

我喜欢保留旧名称并为转换的每个步骤创建新的、长的、描述性的名称。它有时在调试时很有帮助,并允许您查看数据转换的中间步骤,我喜欢它作为我的思维过程。它还有助于使代码更加“自我记录”。

然而,创建新名称的主要缺点是维护对旧数据的引用,这将阻止垃圾收集器释放它。如果用新对象覆盖 arr 引用,现在可以释放 arr 之前引用的旧对象(假设 arr 是对它的唯一引用)。不过,除非您正在处理大量数据并发现这是一个实际问题,否则我不会担心这一点。做对你更有意义的事情,除非你有理由相信它会成为一个问题。


不过,在这个特定示例中,如果 reshape 本质上返回对 arr 已经持有的同一个对象的引用,则不会有功能差异。做对你最有意义的事情。

这完全有助于轻松访问。 同样,调试它的问题也会减少。 除了大规模编程的这两个主要好处外,将新视图分配给名称没有其他好处