I feel like this *could* be worked around though with some fancy footing.  It would probably require going outside of pyyaml, though it would be right at home in libyaml.  The yaml parser just produces an event stream, so one could, in principle, build a sparse data structure gleaned from the events (for example, "there is a WCS tag starting at this line--add an uninitialized WCS object to the object list and ignore remaining events until the next tag").  Later, when accessing that object, the parser would skip back to the beginning of that tag and reparse just that part of the file.  So yes it involves multiple passes, but at least it avoids having to keep full objects in memory until and unless they're needed.

Granted, all that is only something to consider if and when it becomes necessary.