setについて意図と異なる挙動が有り調べても解決できなかったため質問させてください。

このプログラムを実行しますと、

プログラム

d = map(int, [i for i in range(5)])
print(type(d))
print(len(set(d)))
print(type(d))
print(len(set(d)))

このような結果が得られます。

実行結果

<class 'map'>
5
<class 'map'>
0
<class 'map'>

質問

一回目のprint(len(set(d)))は5を返します。二回目のprint(len(set(d)))も同様に5を返す思っていたのですが、0を返してしまう理由を教えていただきたいです。
一回目と二回目の間で特にdはいじっていないので同じ結果が得られるかなと思っています。
もしありえるとしたらsetが変数dを破壊的に変更しているとかあるのかなと思ってます。

環境

Python 3.7.0

よろしくおねがいします。