考虑下面的C++程序:
#include <vector>
#include <iostream>
void add_val(std::vector<int> addTo, int addThis)
{
for(std::vector<int>::iterator it = addTo.begin(); it!=addTo.end(); ++it)
{
*it += addThis;
}
}
void add_ref(std::vector<int>& addTo, int addThis)
{
for(std::vector<int>::iterator it = addTo.begin(); it!=addTo.end(); ++it)
{
*it += addThis;
}
}
int main()
{
std::vector<int> myVector;
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
add_val(myVector, 3);
std::cout<<"After add_val"<<std::endl;
for (std::vector<int>::iterator it = myVector.begin(); it!=myVector.end(); ++it)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
add_ref(myVector, 3);
std::cout<<"After add_ref"<<std::endl;
for (std::vector<int>::iterator it = myVector.begin(); it!=myVector.end(); ++it)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
return 0;
}
程序输出:
After add_val
1 2 3
After add_ref
4 5 6
跑过vector
到add_val()
结果在保持不变的原始vector
,因为它是由值来传递。但是,将vector
传递给add_ref()
会导致原始vector
内的值发生更改,因为它通过引用传递。
在Python 中的所有内容都通过引用传递给。然而,许多内建类型(str
,tuple
,int
,float
等)是不可变的。这意味着您对这些类型执行的任何操作都会导致使用新值绑定到当前作用域的新变量。对于可变类型(list
,dict
等),最终得到与的结果与在C++中通过引用传递参数的结果相同。