는 다음의 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;
}
프로그램 출력 : 그대로 남아 일본어 vector
에 vector
add_val()
에게 결과를 전달
After add_val
1 2 3
After add_ref
4 5 6
을이 값으로 전달되기 때문이다. 그러나 vector
을 add_ref()
으로 전달하면 참조로 전달 된 원래 vector
의 값이 변경됩니다.
파이썬 모두은 참조로 전달됩니다. 그러나 많은 내장 유형 (str
, tuple
, int
, float
등)은 변경할 수 없습니다. 즉, 이러한 유형에 대해 수행하는 모든 연산은 새 변수가 현재 범위에서 새 값에 바인딩되도록합니다. 변경 가능한 유형 (list
, dict
등)의 경우 으로 정확히이되고 C++에서 참조로 매개 변수를 전달한 것과 같은 결과가됩니다.