attractionList* newList = new attractionList(); //make a new object to store old state
newList = &attrList; //copy values from old state
Well, the problem with this is obvious. When the pointers stored in the attrList change all the copies made from it are invalid.
You didn't make a copy. You allocated a new, empty list on the heap, then you discarded your pointer to it and stored a pointer to the existing list.
I think you mean:
attractionList newList = attrList;
but I haven't reviewed the rest of your code, so that might not be a complete fix.
Regarding your comment:
If you need to copy the attractions as well, then you'll need somewhere to store them. Since you don't say how you're storing the originals I can't tell you where to store the copies, but the rest of the code will be something like this:
attractionList newList;
for (attractionList::iterator it = attrList.begin(); it != attrList.end(); ++it) {
attraction *newNode = /* copy of *(it->second) */;
newList.insert(make_pair(it->first, newNode));
}