list.append()的本质就是建立一个索引,去指向你想要往列表里添加的数据.
我有一个需求, 想要生成一个列表嵌套字典的数据, 这个数据里包裹着十个字典, 这十个字典只有一个键的键值不一样,其他的键值对都一致, 应该如何实现呢?
我本来是打算通过list.append()添加十次来实现, 想着每次append之前修改我想要修改的键值对,
但是我发现最后生成的数据文件里,这个键值对的数值全部都一样,而且都是最后一次的数据.
由于python的 time.time()只能获取到秒的时间戳,所以我就给它加上了随机数以及英文字符一起拼接.
我想了很久,当时以为自己的方法写错了, 最后才发现就是被最后一次的数据覆盖了, 那么有没有可能是内存指向的原因?
最后果然验证了我的想法, 就是因为它们的内存地址都是一样的,所以我每次修改json串以后再append, 但是实际上就是每次改动的都是同一个内存地址上的变量.
而且python里, 用一个变量去承接另一个变量, 实际上就是单例模式.
所以我用一个变量给另一个变量赋值,然后用这个变量修改了键值对, 实际上改的都是同一个内存指向的数据.
那么如果想要解决我上面那个需求,此时可以考虑将想要修改的数据用"w"的方式打开一个文件,写进去, 然后用一个新的变量去接收读取的数据, 之后再添加到指定的容器里, 最后当数据获取完毕后序列化到指定的文件中.