python与c++ 值传递 地址传递

python与c++在变量间赋值时的行为不一样。

c++中对变量赋予新值时,变量指向的地址不变。

python中对变量赋予新值时,变量指向新值的地址。(python中值本身有自己的地址)

见代码:

 c++ code:

#include <iostream>
using namespace std;

int main() {
  int a = 1;    //数据(1)储存在a所在的内存空间
  int b = a;    //值传递,此时有两份数据(1)
  cout << "a: "<< a <<endl;
  cout << "b: "<< b <<endl;
  cout << "a add: "<< &a <<endl;
  cout << "b add: "<< &b <<endl<<endl;

  a = 2;    //对a所在的空间赋予新的数据(2),对b没有任何影响
  cout << "a: "<< a <<endl;
  cout << "b: "<< b <<endl;
  cout << "a add: "<< &a <<endl;
  cout << "b add: "<< &b <<endl<<endl; 
 
 return 0;    
}

c++ output:

a: 1
b: 1
a add: 0x7ffdf9636e90
b add: 0x7ffdf9636e94

a: 2
b: 1
a add: 0x7ffdf9636e90
b add: 0x7ffdf9636e94

python code:

a = 1    #在内存中创建数据(1),并将其的地址传递给a
b = a    #将a的地址传递给b,此时只有一份数据(1)
print("a: ",a)
print("b: ",b)        
print("a add: ",id(a))         #指向数据(1)
print("b add: ",id(b),"\n")    #b的地址与a一样,都指向数据(1)所在的内存

a = 2    #在内存中创建数据(2),并将其的地址传递给a。b仍然指向数据(1)
print("a: ",a)
print("b: ",b)
print("a add: ",id(a))        #指向数据(2),与c++不同!!
print("b add: ",id(b),"\n")    #仍然指向数据(1)

python output: 

a:  1
b:  1
a add:  9079008
b add:  9079008 

a:  2
b:  1
a add:  9079040
b add:  9079008 

 

posted @ 2021-03-11 06:03  逻辑北海  阅读(231)  评论(0)    收藏  举报