使用自定义类的对象 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 的问题, 和 print(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
wrq May 15, 2019
字典值存的是指向对象的指针
|
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++还有值语义的
|