pf internal data organization is LINEAR, meaning it is a tree. it uses a very simple and deterministic reference count based memory management system. -> containers (list/queue/stack) -- these have a dedicated allocator stack. DUP wil copy the structure. -> SCALARS -- DUP will copy the atom. scalars are leaf nodes. -> PACKETS -- use dedicated allocator stack per type symbol. DUP will increase the reference count. packets cannot contain other things, and are leaf nodes in the data tree. packets use copy on write for 'functional' words which cannot have side effects, for example the image and matrix words, while 'imperative' words will write to shared packets. for example: drawing and all operations that have an accumulative nature. non-pure packets (i.e. streams) are necessarily shared because they cannot be copied, unless they have an internal copy constructor.