C++和python中的变量定义时的区别
这张图比较全面的显示了python和C变量定义时的区别:
C/C++:变量对应内存中的一块区域,当修改这个值时,直接修改内存区域中的值。
python:变量只是对一块存放指定值的内存区域的引用,赋值时是让该变量引用另一块存放新值的内存区域。因此在赋值时等号左边的变量类似于标签,等号右边的是值对应的地址。
例如下python程序:
t = [0] #定义一个只有0值的列表
a = t #将列表赋值给变量a
print(id(t)) #id = 2416187272968
print(id(a)) #id = 2416187272968
t= [5] #修改t的值
print(id(t)) #id = 2052857374152
print(a) #打印a的值发现,a=[0]没有改变。
t = [0] #定义一个只有0值的列表
a = t #将列表赋值给变量a
print(id(t)) #id = 2416187272968
print(id(a)) #id = 2416187272968
t[0]= 5 #修改t的值 和上面不同,这样不会导致变量所指的地址发生变化。
print(id(t)) #id = 2416187272968
print(a) #打印a的值发现,a=[5]。可见修改t的值导致了a的值的变化。
这个小例子就是由于python特有的变量机制导致的,在赋值时会改变变量的所指地址。编程的时候应该注意,避免采坑。