這兩天看了一些網上各大互聯網公司的面試題,發現騰訊特別喜歡考察++和–以及移位運算相關的內容。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