python - 什么是面向对象编程的计算开销成本?

标签 python oop data-analysis

我有大量数据(一个 250,000 X 1,000 双倍数据立方体,大约 4 gig 文件),我想使用我之前用 Python 编写的一组 OOP 类来操作它。目前数据集已经很大,要读入我的机器内存我必须至少将它分成两半,所以计算开销是一个问题。我的 OOP 类创建新对象(在本例中我将需要 250,000 个新对象,每个对象是一个包含 1,000 个 double 的数组)来处理数据。为通用 OOP 语言创建对象所需的内存和计算开销是多少?在 python ?在 C++ 中呢?

是的,我知道我可以创建一个数组类的新类。但是 1) 我已经完成了这些类,并且 2) 我将我创建的每个对象放回数组中以供以后访问。这个问题是教学性的

*更新:我想高效地利用时间,我的时间和电脑。如果不需要,我不想重写我已经拥有的程序,花时间优化代码会浪费我的时间,如果我浪费计算机时间,我不在乎那个。我实际上有一台带有 4Gig ram 的 64 位机器。数据是一张图像,我需要对每个像素进行多个过滤。*

最佳答案

参见 http://code.activestate.com/recipes/546530/

这是 Python 对象的近似大小。

OO 大小“惩罚”通常被以下能力所抵消:(a) 简化处理和 (b) 首先在内存中保留更少的内容。

没有 OO 性能开销。零。在 C++ 中,类定义被优化得不复存在,剩下的就是 C。在 Python 中——就像所有动态语言一样——动态编程环境添加了一些运行时查找。大多数情况下,这些是直接散列到字典中。它比编译器为您完成所有解析的代码慢。然而,它仍然非常快,开销相对较低。

C 中的错误算法很容易比 Python 中的正确算法慢。

关于python - 什么是面向对象编程的计算开销成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372511/

相关文章:

python - 无法弄清楚如何停止返回列表内的列表(leetcode问题)

C#,读取固定宽度的记录,一个文件中的不同记录类型

c++ - 如何在两个类中双重引用子类和父类

PHP 5.3 : Late static binding doesn't work for properties when defined in parent class while missing in child class

algorithm - 为什么主成分分析给我截然不同的结果?

Python Pandas - 比较列文本并提供匹配的字数

python - 在 Python 中使用 pytz 本地化纪元时间

python - Django 内部服务器错误而不是 404

python - 使列表python具有 key 对

python - Pandas 数据框平均值