思考一下如下代码, 思考一下, 印象更深刻哦!
#include <stdio.h>
#include <string.h>
int main(void) {
const int age = 17;
int a, b, c;
a = b = c = age;
c = 4;
printf("%d\n%d\n%d\n%d\n", age, a, b, c);
}
代码会发生变化吗?结果如下
17
17
17
4
我们观察到, 它就只有自己变, 并未影响到其他
那么python也一样吗?差不多吧
c = 4
a = b = c
c = 5
print(a, b, c, sep='\n')
运行结果:
4
4
5
如果是python的列表这样的可变类型呢?值得探究一下:
c = [1, 2, 3, 4]
a = b = c
c = 5
print(a, b, c, sep='\n')
我们直接把c变成不可变类型看看:
[1, 2, 3, 4]
[1, 2, 3, 4]
5
发现也是只有c直接变, 那么如果把c内部的一个小元素改变会怎样呢?
c = [1, 2, 3, 4]
a = b = c
c[2] = 5
print(a, b, c, sep='\n')
结果震惊萌新一万年:
[1, 2, 5, 4]
[1, 2, 5, 4]
[1, 2, 5, 4]
好家伙, 我直呼好家伙, 为什么会这样呢?
我的观点就是. python中的赋值语句其实就是把变量共同指向一个对象, 但如果有人偷偷的改变了这个对象内部的内容, 好家伙, 导致其他人也变了, 那为什么不可变类型不会变呢?好家伙, 都说不可变咯, 咋变?或许可以尝试击打内存条, cpu, 震动一下或许就能改变了, 如果真的变了, 那么其他的应该还是会受到影响的, 毕竟都指向同一个家, 皮了一下, 嘻嘻