Python:最好是将可变对象作为参数传入,还是让方法在本地创建一个对象并返回它?

2024-06-06 05:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相对直截了当的问题,但在网上找不到答案。我知道C++中,如果你要创建一个大对象(比如说一个大的字符串向量),你会避免做:

int main() {
    vector<string> v = foo()
}

vector<string> foo() {
    vector<string> result;
    // populate result
    return result;
}

而是选择下面的版本,因为上面的方法调用必须将本地向量复制到main中声明的向量,而下面的示例直接添加到main中的向量(或多或少):

int main() {
    vector<string> v;
    foo(v)
}

void foo(vector<string>& result) {
    // populate result
    return result;
}

我的问题和python是一样的。最好是将可变对象作为参数传入,还是让方法在本地创建一个并返回它?我对Python的机制不太熟悉。你知道吗


Tags: 对象方法字符串答案版本声明stringreturn
1条回答
网友
1楼 · 发布于 2024-06-06 05:00:15

Python的数据模型与C++的数据模型有很大的不同。

在Python中,新对象是在堆上创建的,并绑定到名称空间中存在的变量(函数调用、类、实例和语言实现名称空间的各种其他部分)。你知道吗

<>在C++中,如果没有适当的小心,可以在堆栈上分配的函数或方法调用中创建对象。如果你的函数返回一个对这个对象的引用,你会看到问题,因为内存可能会被重复使用,引用充其量也会变得无效,最坏也会变得危险!你知道吗

在Python中,不可能创建这种类型的“悬挂引用”,因为只要存在对对象的任何引用,对象就会保持活动状态。因此,在函数中创建新对象并返回它们是完全允许的。这通常比强制调用者为要修改的函数创建可变对象更好。你知道吗

相关问题 更多 >