質問: np.random.randn(100, 100) # 100x100の配列 print(sys.getsizeof(arr[0])) print(sys.getsizeof(arr[0].copy())) # 出力結果 # 96 # 896 ``` 同じものをsys.getsizeofに渡しているはずなのに、どうして返ってくる値が異なるのでしょうか?
回答: sys.getsizeof(object[, default]) > > オブジェクトに直接起因するメモリ消費のみを表し、参照するオブジェクトは含みません。 > > > との記述から推測すると、`np.array`が具体的にどのようにメモリ保持しているかは分かりませんが `arr[0].copy()`で返されるオブジェクトは、それを直接保持(起因)しているのに対し`arr[0]`は参照経由で保持(起因)しているため結果が異なると考えられます。 すなわち、以下のようなケースのような結果の違いが起こりえます。 ``` import sys l = [i for i in range(100000)] print(sys.getsizeof(l)) # 824464 m = [l] print(sys.getsizeof(m)) # 72 print(sys.getsizeof(m[0])) # 824464 ```