在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 已经持有的同一对象的引用,则不会有功能差异。做对你最有意义的事情。

,

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