This behaviour has changed since that book was published. I am writing this additional answer to make it clear how Mathematica 9 searches contexts for symbols and that even the current version 9 documentation is incorrect in describing this. ###How symbol lookup actually works When you enter a symbol name such as `x`, Mathematica will check if a symbol with this name already exists. It will first search the contexts from `$ContextPath` for `x`, one by one. If it doesn't find it there, it'll search the context from `$Context` for it. If it still doesn't find it, then it will *create* a new symbol named `x` in `$Context`. Thus `$ContextPath` controls where to *look for* symbols, while `$Context` controls where to *create* new symbols. Your observations are explained by these rules, noting that `Begin` will change `$Context` only but not `$ContextPath`. Note that [`BeginPackage`](http://reference.wolfram.com/mathematica/ref/BeginPackage.html) will change both `$Context` and `$ContextPath`. ###Warning: the documentation contains an error The [`$ContextPath` documentation](http://reference.wolfram.com/language/ref/$ContextPath.html) states that > `$ContextPath` is a global variable that gives a list of contexts, *after* `$Context`, to search in trying to find a symbol that has been entered. In fact `$ContextPath` is searched *before* `$Context` in the current version. [In old versions this was not the case][1], as the Wagner book describes. I don't know when the change happened. The [Contexts tutorial](http://reference.wolfram.com/language/tutorial/Contexts.html) does correctly state the order of search in the current version: > Since `$Context` is searched after `$ContextPath`, you can think of it as having "." appended to the file search path. [1]: https://mathematica.stackexchange.com/a/43624/12