考慮下面的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++中通過引用傳遞參數的結果相同。