Namespace is basically a way to implement scope.
In Java or C the compiler determines where a variable is visible through static scope analysis.
In Python, each package, module, class, function and method function owns a "namespace" in which variable names are resolved. Plus there's a global namespace that's used if the name isn't in the local namespace.