@26, you can accomplish manual memory management in C++ with new/new/delete/delete. But I honestly don't recommend manual memory management at all...... it can be hard to remember to do it, and then you've got memory leaks all over the place that you don't know how to fix, so you need to call in valgrind/hellgrind.
To be honest, I'd go for the object collections. Memory isn't an issue unless you've got like a 30000x30000 map, with practically each tile taking up ten objects (assuming, of course, that an object is 128 KB... unlikely). In such a case you'd only be using approximately 37 MB for each dimension. So that really wouldn't be much of a problem; either way, such a map would be more resource-intensive on the CPU due to map creation, item processing, etc. (It would also be incredibly hard to play in multiplayer mode, and would be practically un-navigable in either case.) So, like I said, object collections would be your best bet here.
@31, I prefer Cereal better than boost.serialization simply because I have access to JSON, XML, and non-portable and portable binary outputs and inputs for structures. It might be possible to port Cereal to Python, given enough time (we'd be porting some of the C++ STL over too though). That would, however, be unnecessary and reimplementing the wheel simply because Python already has its own serialization libraries.
Sidenote: if we're going to drag the audio game industry out of the dark ages, then we need to stop going for 2D and go for 3D right away. It will be hard to do, yes, but it'll be worth it.
"On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question." — Charles Babbage.