在python中,将视图指定给相同的名称与指定给新名称相比,有什么好处吗?

在python中,将视图指定给相同的名称与指定给新名称相比,有什么好处吗?,python,numpy,object,memory,pep8,Python,Numpy,Object,Memory,Pep8,假设我正在一个python对象上创建一个新视图,这是我需要继续的唯一视图。将其指定给新名称与覆盖原始名称之间有什么区别吗?如果是,哪一个更好 例如,假设我有一些numpy数组arr,并且只需要对其进行一些修改。是否可以将新视图重新分配给arr,或者我应该给它一个新名称 为清晰起见,示例: import numpy as np # some array arr = np.zeros([100, 1]) # option 1 arr = arr.reshape(10, 10) # option

假设我正在一个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变量赋值作为指针,当我们赋值任何变量时,它实际上指向特定的数据。

否,两者都是相同的,因为Python中没有预先声明变量。Python与其他编程语言完全不同,如C++或java。
Python变量赋值作为指针,当我们赋值任何变量时,它实际上指向特定的数据。

这是基于观点的,但我不同意现有的答案

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

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



但是,在这个特定的示例中,如果
restrape
基本上返回了对
arr
已保存的同一对象的引用,则不会有功能上的差异。做对你最有意义的事。

这是基于观点的,但我不同意现有的答案

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

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



但是,在这个特定的示例中,如果
restrape
基本上返回了对
arr
已保存的同一对象的引用,则不会有功能上的差异。做对你来说最有意义的事。

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

这完全有助于方便访问。 同样,调试它的问题也会少一些。
除了在大规模编程中的这两个主要优点外,为名称指定新视图没有其他优点

首选方法的另一个缺点是必须提供的名称数量。。我倾向于重复使用名称,除非我看到创建新名称的好处…@Vinzent我认为这是一种优势!与提出好的函数名帮助您思考函数的严格用途类似,提出好的变量名迫使您实际思考行的用途,并且如上所述,使代码自文档化。我同意这样的观点,如果你不能想出一个好名字,你很可能对你写的东西有不完整的想法,或者你试图一下子做太多。我经常重命名函数和变量,直到一切正常为止。我同意你的观点,但在我编写的代码中(科学计算/大量使用numpy的数学)我经常以一行代码结束,我需要将其拆分为5-10行,并且这两个子行本身都没有任何意义,但只能使行长度不超过1000个字符。在这种情况下,“如果你不能想出一个好名字,你可能对你所写的东西有不完整的想法,或者你试图一下子做太多事情”,这不是一个有效的论点。定义大系数矩阵等。OP特别提到分配
numpy
视图。因此,即使重新分配,原始数据缓冲区仍然保留。原始数组的“其余部分”可能会被释放,但这是一个较小的内存使用。@hpaulj啊,我在阅读
restrape
的文档时忽略了这一点。看起来它必须返回一个新对象,但我发现事实并非如此。我会更新的。您首选方法的另一个缺点是您必须提供的名称数量。。我倾向于重复使用名称,除非我看到创建新名称的好处…@Vinzent我认为这是一种优势!类似于如何提出好的函数名帮助您思考str