这两天看了一些网上各大互联网公司的面试题,发现腾讯特别喜欢考察
++
和–-
以及移位运算相关的内容。C++相对来说还是比较熟悉的,对于这类问题只要记住运算符的优先级一般问题不大。由于也会经常用Python,突然觉得Python中为什么没有自增自减运算符呢?
- 比如python中有
x += y
这种形式的表达式,但是没有x++
这样的。查了一些资料,发现+=
是代表改变了变量,相当于重新生成了一个变量,把操作后的结果赋予这个新生成的变量。但是++
的话代表改变了对象本身,注意是对象本身,而不是变量本身。这个对象指的是内存中存放基本类型的数据的地址所指的内容。
而Python的模型规定,数值对象是不可改变的。
换句话说:变量保存的数据可以被多次修改,而常量一旦保存某个数据之后就不能修改了。
比如下面这个例子:
>>> b = 5
>>> a = 5
>>> id(a)
162334512
>>> id(b)
162334512
>>> a is b
True
- int理论上是每次赋值都创建一个新对象的。但是由于使用频繁,为了提升性能避免浪费,所有python有个 整数池,默认1~256的数字都属于这个整数池,这些每次赋值的时候,是取得池中的整数对象。
但是其他的除外,如下所示:
>>> a = 257
>>> b = 257
>>> id(a)
140397570652784
>>> id(b)
140397570652736
Python内部的存储空间分配机制和C++
不同。这是因为Python存在整数池。C++
不知道存在不。
例如,当你写下a=b=c=1
时,在Python内,这三个变量的指针都指向同一个地方;而在C++
当中,编译器会给a,b,c三个变量分配不同的内存空间。
Python id() 函数 (详细 )
id() 函数返回对象的唯一标识符,标识符是一个整数。
返回值: 返回对象的内存地址。