博主在看某书上的python代码时产生疑问:为什么python不像c++,java一样支持变量的自加与自减操作呢?这样的话一些代码就会简洁不少,于是查找了一些资料,但是觉得都没有讲的很明白,这里把他们讲到的涉及的一些知识点介绍一下。

python与c++中数值变量存储机制的不同

我们先来看python的一段代码:

a = 5
print("                a = ",a,"地址为:",id(a))
a += 1
print("a+=1后  ","a = ",a,"地址为:",id(a))
b = 5
print("                b = ",b,"地址为:",id(b))
c = b
print("                c = ",c,"地址为:",id(c))
a =  5 地址为: 140451760084256
        a+=1后  a =  6 地址为: 140451760084288
                b =  5 地址为: 140451760084256
                c =  5 地址为: 140451760084256

我们看到a+=1之后,a所指向的存储地址已经改变了,变量b和变量c都等于5,这两个变量所指向的地址为数值5所在的地址。
我们下面来看c++的一段类似的程序:

#include <iostream>
using namespace std;

int main()
{
	int a = 5;
	cout <<"               a="<<a<<"地址为:"<< &a << '\n';
	a++;
    cout <<"a++后"<<"    a="<<a<<"地址为:"<< &a<<'\n';
	a+=1;
	cout <<"a+=1后"<<"   a="<<a<<"地址为:"<< &a<<'\n';
	int b=5;
    cout<< "               b="<<b<<"地址为:"<<&b<<'\n';
	int c = b;
	cout<< "               c="<<c<<"地址为:"<<&c;
   return 0;
}
a=5地址为:0x7fff6ea1ea78
        a++后  a=6地址为:0x7fff6ea1ea78
       a+=1后  a=7地址为:0x7fff6ea1ea78
               b=5地址为:0x7fff6ea1ea74
               c=5地址为:0x7fff6ea1ea70

我们这里看到有明显的不同,a++与a+=1之后变量a所指向的地址并没有改变;虽然变量b=c=5但是这两个变量所指向的地址也并不是a所指向的那个地址。
综上我们发现:
C++
1.是以变量名字来分配内存地址的,只要数值的变量名字不同,那么它们就分配不同的地址。
2.a++与a+=1的操作下a所指向的内存空间都不会改变(也不需要改变,这样设计是合理的
Python
1.Python中在某一个数值区间内会有一个整数池,无论你的整数叫什么名字,只要和池中某个整数值一样,那它俩就会分配为同一个存储空间,不同的变量名都指向了这个空间。
2.a+=1操作下,由于内容改变了,所以a所指向的内存空间也需要改变(如果所指向的内存空间不改变的话,而数值变量b也指向了这片空间,那么改变a的同时就改变了b,这不是我们希望的,所以变量a的指向必须改变,这样设计是合理的)。