2016-07-06 5 views
-2

次のコードを実行すると、値Aが返されます。私は再度実行すると値Bを取得します。なぜですか。同じ結果を出すべきではありませんか?オブジェクトの場所 - Python

コード

list_a = ['one_A', 'two_A', 'three_A'] 

#initialize the list 
new_li = map(lambda i: '{0}\n'.format(i), list_a) 

print(new_li) 

<map object at 0x00000000093E7E80> 

値B

<map object at 0x0000000009423080> 

地図オブジェクトをリストにする方法はありません。しかし、なぜマップオブジェクトnew_liが再作成されたときにメモリ位置が異なるのか。

+6

は、なぜ彼らは同じでしょうか? – melpomene

答えて

2

変数に値を代入すると、変数はメモリの場所に格納され、そのオブジェクトへの参照が作成されます。その結果、あなたの変数は参考に過ぎません。したがって、新しい値を変数に代入すると、そのメモリ位置が新しい値で上書きされるのではなく、新しいメモリ位置に新しいオブジェクトが作成され、新しいメモリ参照位置が作成されます。

例を参照してください。この場合、リストが作成されると、リスト[1,2]はメモリ位置46777352に格納されます。 bが作成されると、メモリ位置46797512に格納されます。同じ値を持っていても、同じメモリ位置を参照していないため、aはbではありません。 aが[1,2,3]の値に再割り当てされると、メモリ位置46777352の値は変更されず、メモリ位置46812296に新しいオブジェクトが作成されます。変数bは元のメモリ位置を保持します変数aの後に作成されます。また、ここでは

を読む

Example

概念を説明pycon 2015と2016からいくつかの良いビデオがあります。 Pythonの程度

事実と神話 - Pycon 2015

https://www.youtube.com/watch?v=_AEJHKGk9ns&feature=youtu.be

浸漬することによりパイソン - Pycon 2016

https://www.youtube.com/watch?v=9k5687mmnoc

関連する問題