廖老师:结合 tuple 那一节关于不可变对象的讨论,我自己思考并实验了一下,是否可以这样理解:
tuple 实质存储的是类似指针的东西。例如 t = (1, 2, [3, 4]) ,虽然显示出来是 t 有 1、2、[3, 4] 这三个值,但实质上在 python 的底层实现上, t 存储的是指向这三个值的指针,需要用值的时候才去读取指针指向的值。
t = (1, 2, [3, 4])
1
2
[3, 4]
例如,想要把 t 的值变为 (1, 2, [3, 4, 5]):
(1, 2, [3, 4, 5])
t[2].append(5)
t[2] = [3, 4, 5]
而 dict 和 set 的 hash 算法是根据对象的值来计算的,所以要求指针指象的对象的值也不可变。
不知我这样理解是否正确?
Sign in to make a reply
大梦shake
廖老师:结合 tuple 那一节关于不可变对象的讨论,我自己思考并实验了一下,是否可以这样理解:
tuple 实质存储的是类似指针的东西。例如
t = (1, 2, [3, 4])
,虽然显示出来是 t 有1
、2
、[3, 4]
这三个值,但实质上在 python 的底层实现上, t 存储的是指向这三个值的指针,需要用值的时候才去读取指针指向的值。例如,想要把 t 的值变为
(1, 2, [3, 4, 5])
:t[2].append(5)
。这样并不是改变了 tuple,因为指针指向没变。t[2] = [3, 4, 5]
,则相当于把指针指向另一个对象,故会报错。