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