Creating a copy of a bpy_prop_collection instance?
Save as a library

Possibly the simplest way to do this is to save the required objects to a library

import bpy
scene = bpy.context.scene
dump = [scene]
dump.extend(o for o in scene.objects)

bpy.data.libraries.write(
        "/tmp/scene_dump.blend",          
        set(dump), 
        fake_user=True, 
        compress=True)


then link or append back as req'd (py console code)

&gt;&gt;&gt; with D.libraries.load("/tmp/scene_dump.blend") as (src, dest):
...     src.scenes
...     src.objects
...     
['Scene']
['Suzanne', 'Speaker', 'Camera.001']


Have a look at rna_*** modules 

In the 2.XX/scripts/modules/ folder you will find some modules prefixed with "rna_".  Check them out for an exhaustive guide on how to navigate blenders rna.

An example of using rna_xml.py to dump the context scene into a file.

import bpy
from rna_xml import rna2xml

scene = bpy.context.scene

scene_dump = "/tmp/scenedump.xml"

with open(scene_dump, "wt") as f:
    rna2xml(fw=f.writelines, 
    root_rna=scene,
    root_node="Scene")


A small snippet of the 100+ megabyte file produced

  &lt;objects&gt;
    &lt;Object name="Cube"
            users="1"
            use_fake_user="FALSE"
            tag="FALSE"
            is_library_indirect="FALSE"
            library="NONE"
            override_static="NONE"
            data="Mesh::Cube"
            type="MESH"
            mode="OBJECT"
            layers_local_view="FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE"
            bound_box="-1 -1 -1 -1 -1 1 -1 1 1 -1 1 -1 1 -1 -1 1 -1 1 1 1 1 1 1 -1"
            parent="NONE"
            parent_type="OBJECT"