3

別の経験の一部として、リスト内包表記の問題に遭遇しました。簡単に言うと、次のコードを試している場合:

m = [ k**2 for k in range(7)]
print m
[0, 1, 4, 9, 16, 25, 36]
print k
6
  1. 私の質問は、どのようにして python がリスト内包表記の外で k の値を取得できるのでしょうか?
  2. k がガベージ コレクションされないのはなぜですか?
  3. これはメモリリークではありませんか?
4

2 に答える 2

11

Python 2 では、リスト変数が周囲のスコープに「漏れる」た​​めです。これは、リスト内包表記の作成方法に誤りがありました。

これは、辞書内包表記と集合内包表記、ジェネレーター式、および Python 3 ではリスト内包表記についても修正されています。

これはメモリ リークではありません。変数のスコープ内の単なるエラーです。

于 2013-05-17T15:19:27.540 に答える