[BUG] dataframe.copy(deep=True) does not create a copy of dict objects
#### Code Sample, 

```
# Create some example data
records = []
for i, x in enumerate(list('abcdefg')):
    record = {
        'id': i,
        'letter': x
    }
    records.append(record)
    
df = pd.DataFrame({'data': records})


def _update_key_inplace(x):
    # Modifies the dictionary object in-place
    x['letter'] = 'foo'
    
before1 = copy.deepcopy(df)   ## No better results for this
before2 = df.copy(deep=True)
df['data'].apply(_update_key)
```


#### Problem description

Running the code above will update the 'letter' key of the dictionaries for all instances (before1, before2 and df).

#### Expected Output

before1 and before2 are deep copies and should be unchanged.
