使用自定义类的对象 a 作为字典的 value,改变 a 的属性,对应字典 value 同时改变 输入:
class A:
    key1=1
    def __init__(self):
        self.key2=2
a = A()
dic = {'cls':a}
print(dic['cls'].key1,dic['cls'].key2)
a.key1,a.key2 = 3,4
print(dic['cls'].key1,dic['cls'].key2)
输出:
1 2
3 4
|  |      1linnchord      2019-05-15 13:45:22 +08:00 问题点在哪儿? | 
|  |      2viperasi      2019-05-15 14:06:42 +08:00 dic 里的 a 是内存引用而不是值引用? | 
|      3wonderay      2019-05-15 14:08:19 +08:00 因为 dic['cls'] is a, 输出:True | 
|      5hellwys1      2019-05-15 16:41:02 +08:00 把我看楞了,啥意思? 这不是对的吗? 还是觉得 key2 不该变? 这不是 value 的问题, 和 print(a.key1) print(a.key2) 没区别 | 
|      6lalalla      2019-05-15 16:43:26 +08:00 就是 cls 指向的对象本身变了啊.. | 
|      7junjieyuanxiling      2019-05-15 16:45:16 +08:00 via Android 这有什么不对的吗? 还有,建议你看看提问的智慧。 | 
|  |      8ipwx      2019-05-15 16:52:29 +08:00 | 
|  |      9ipwx      2019-05-15 16:54:14 +08:00 楼主的疑问,唯一的回答就是,python 所有标志符都是引用,用 c++ 的话来说就是所有标志符都是指针。 | 
|  |      10moxiaowei      2019-05-15 16:57:37 +08:00 python 基础 可变参数 /不可变参数 | 
|  |      11jesnridy      2019-05-15 16:58:20 +08:00  1 面试题:说说 Python 中可变对象和不可变对象 | 
|  |      13wrq      2019-05-15 17:06:30 +08:00 字典值存的是指向对象的指针 | 
|  |      14inhzus      2019-05-15 17:16:09 +08:00 via Android  1 mutable & immutable objects  https://i.loli.net/2019/05/15/5cdbd8af49d1799870.png | 
|      15SeaRecluse      2019-05-15 17:23:52 +08:00 你改成 a = A() b = a dic = {"cls":b} 然后你就可以发现 python 的真相了 | 
|  |      16NullPoint OP @jesnridy  明白了,字典 value 存的是可变参数,属性被改变了,id 并没有变 同理 ```python b = [] dic = {'lit':b} print(dic['lit']) b.append(1) print(dic['lit']) ``` 结果为 ```python [] [1] ``` | 
|      17pp3182429      2019-05-15 17:42:53 +08:00  1 | 
|  |      18Takamine      2019-05-15 18:06:15 +08:00 via Android 深拷贝浅拷贝瞎拷贝:doge:。 | 
|  |      19est      2019-05-15 18:17:35 +08:00 所有的语言应该都是这样处理的吧。 | 
|      20ty89      2019-05-15 18:55:07 +08:00 是你电脑坏了,换一个吧 | 
|      21exonuclease      2019-05-17 02:26:28 +08:00 via iPhone 你又不是 c++还有值语义的 |