TL;DR: It’s unnecessary, but it’s a good practice to follow.
Since a default graph is always registered, every op and variable is placed into the default graph.
The statement, however, creates a new graph and places everything (declared inside its scope) into this graph.
If the graph is the only graph, it’s useless. But it’s a good practice because if you start to work with many graphs it’s easier to understand where ops and vars are placed.
Since this statement costs you nothing, it’s better to write it anyway. Just to be sure that if you refactor the code in the future, the operations defined belong to the graph you choose initially.