python「自己増加」について
1662 ワード
多くの言語には自己増加があり、
元pythonの数値タイプは可変データではありませんでした.数値タイプのデータは【メモリ】では変更されず、変数値が変更されると、新しいメモリ割り当て値が申請され、変数が新しいメモリアドレスに指定されます.
aの値が変化すると,aが指すメモリアドレスも変化することがわかる.C言語では、aが指すメモリアドレスは変更されず、メモリの内容が変更される.
ここから、なぜ「自増」がpythonに存在しないのかが理解できます.++オブジェクト自体が変更されたことを表し、pythonの数値タイプは可変ではありません.可変ではない以上、増加から来ていますか?これは技術的な問題ではなく、設計哲学の問題のようです.
では、
驚くべきことに、頻繁に使用される数字について、メモリを節約するために、pythonには整数プールというものがあります.私はpython 3にいます.5.4でテストし、整数プールは-5~256を含む.すなわち,[−5,256]の範囲では,同じ値の変数が同じメモリアドレスを指す.
++i
のようにiの値を1増加させる.Pythonを書くときに自増演算を習慣的に使った結果,プログラム中の++i
は1を増やしていないことが分かった.どうしたんですか.pythonの++i
はいったいどういう意味ですか?元pythonの数値タイプは可変データではありませんでした.数値タイプのデータは【メモリ】では変更されず、変数値が変更されると、新しいメモリ割り当て値が申請され、変数が新しいメモリアドレスに指定されます.
>>> a = 10
>>> id(a)
140698656902112
>>> a = a+1
>>> id(a)
140698656902144
aの値が変化すると,aが指すメモリアドレスも変化することがわかる.C言語では、aが指すメモリアドレスは変更されず、メモリの内容が変更される.
ここから、なぜ「自増」がpythonに存在しないのかが理解できます.++オブジェクト自体が変更されたことを表し、pythonの数値タイプは可変ではありません.可変ではない以上、増加から来ていますか?これは技術的な問題ではなく、設計哲学の問題のようです.
では、
++i
はいったい何ですか.この2つの+
は、実際には、他の言語での自己増加ではなく、データの正負を表す正号〜である.驚くべきことに、頻繁に使用される数字について、メモリを節約するために、pythonには整数プールというものがあります.私はpython 3にいます.5.4でテストし、整数プールは-5~256を含む.すなわち,[−5,256]の範囲では,同じ値の変数が同じメモリアドレスを指す.
>>>a = -5
>>>b = -5
>>>a is b
>>>True
>>>a = 256
>>>b = -256
>>>a is b
>>>True