The DisplayObject class is the base class for all objects that can be placed on the display list. There are to types: DisplayObject and DisplayObjectContianer. DisplayObjects are objects that can have no children (such as Shape or TextField Objects). So, as you may have assumed, the DisplayObjectContainer is an DisplayObject that can have children, being either displayObjects or other DisplayObjectContainers. DisplayObjectsContainers are what allow you arrange objects on the stage. Lets examine the example below:

//main timeline: frame 1
var myMovieClip:MovieClip = new MovieClip();
var container1:Sprite = new Sprite();
var container2:Sprite = new Sprite();

container1.addChild(myMovieClip);
container2.addChild(container1);
this.addChild(container2);

As you can see, I have created three Objects, one MovieClip and two Sprites (sprites are new to AS 3.0, they are basicly a lightweight MovieClip containing no timeline, perfect for containers). I then added them to one another using the addChild method. Adding MyMovieClip as a child to container1, container1 as a child of container2, and finally, contiainer2 as a child of the main timeline or _root. Below is one way we could visualize the display list:

display list

main timeline ( _root)
container2 (child of _root)
contianer1 (child of container2)
myMovieClip (child of container3)

The beauty of the display list and its versiatility over depth managment, is that though our MovieClip object is parented (or nested) inside two other objects (three if you count _root), we can still easily move our MovieClip from one parent to another. Below is an example of moving the MovieClip object to the _root:

//main timeline: frame 1
container1.removeChild(myMovieClip);
this.addChild(myMovieClip);
trace(myMovieClip.parent); //outputs: [object MainTimeline]

Thats it! now myMovieClip is a child of the main timeline or _root. To achieve this in AS 1.0/2.0 would be insanly hard and in most cases impossible.