python中的=号赋值,实际上这种是一种共享内存的引用赋值。可以这么说,python中根本没有其他语言的赋值这回事,全部都是引用操作。
# python中的变量在第一次出现时,直接赋值,这个过程就是创建一个内存空间,并把数据保存进去。 num = 3 # 但是,如果该变量赋值过程中,=号右边的不是一个新数据,而是已经在内存中出现过的数据/变量,则这个过程是不会占用新的内存空间的。 num1 = num print(num, id(num)) #3 4561938800 print(num1, id(num)) #3 4561938800 # 这里重新修改了变量的指向,这里为什么num不跟着一起变化呢?原因是因为小数据池的机制导致的。4已经在内存中了。 # 因此形成的效果在于如果变量的值是一个数值、字符串类型,那么变量改值就会发生变量指向到其他的内存空间,但是不影响引用的变量。 num1 = 4 print(num1) # 4 print(num) # 3
# 但是,针对于一些复杂的数据结构:字典,列表,集合,这几种就有区分了。以以下列表为例: # data1 = [1,2,3] # data2 = data1 # data2.append(4) # print(id(data2), data2) # 2722959468672 [1, 2, 3, 4] # print(id(data1), data1) # 2722959468672 [1, 2, 3, 4]