回答編集履歴

1

d

2019/04/24 06:09

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -73,4 +73,23 @@
73
73
  ----
74
74
 
75
75
  1つの Notebook でいろいろなコードを実行していると、使ってない変数でもカーネルをシャットダウンする前まではずっと残っているので、使い終わった Notebook はシャットダウンしましょう。
76
- 書いてる最中でも試行錯誤して未使用な変数がスタックしてきたら、手動で消すより、Notebook をリスタートしたほうがよいです。
76
+ 書いてる最中でも試行錯誤して未使用な変数がスタックしてきたら、手動で消すより、Notebook をリスタートしたほうがよいです。
77
+
78
+ ## 追記
79
+
80
+ > 100000という値と1という値が同一として表されているのはおかしい
81
+
82
+ Python の int 型は格納する値の大きさによって適切に拡張されるようになっているので、1 と 100000 はたまたま同じメモリ量で表されていたのだと思います。
83
+ C++ の std::vector のように最初は一定量のメモリを確保しておいて、足りなくなったら拡張するようになっているみたいです。
84
+
85
+ ```
86
+ import sys
87
+
88
+ a = 10000
89
+ b = 10000000000000000
90
+
91
+ print(sys.getsizeof(a), sys.getsizeof(b)) # 28, 32
92
+ ```
93
+
94
+ 詳しい解説が以下にありました。
95
+ [Understanding memory allocation for large integers in Python - Stack Overflow](https://stackoverflow.com/questions/40344159/understanding-memory-allocation-for-large-integers-in-python)