引用类型,通过赋值,内存地址不变,通过另外修改数据之后,内存还是不变, 也不是说,list1 = list2 当list2改变,list1也跟着改变 非引用类型,通过赋值,内存地址不变,通过另外修改数据之后,内存会变, 也不是说,a = b 当b改变,a不会改变,它会重新开辟内存空间 总结:定义常用类型(int,string)时,它会先去找内存里有没有这个值,如果存在,它会指向该数据,不存在,开辟新空间,要改变它的值(赋值)同理 定义集合类型时(list,tuple)时,它赋值时,不会去找,而是直接去开辟空间,但是集合赋值集合时(list1 = list2),是指向。 例: a = 0 b = 0 与a同一地址 c = 1 b = 2 开辟一个新空间 a = 2 指向b的地址 list1 = [1,2] list2 = [1,2] 地址与list1 不一样 list3 = list1 与list1一样 list3[1] = 3 当list3改变值时,list1也会跟着变 可以通过 id(变量) 来查看地址
代码演示:
a = 0 b = 0 c = 1 print("a=%d"%id(a)) print("b=%d"%id(b)) print("c=%d"%id(c)) b = 2 print("b=%d"%id(b)) a = 2 print("a=%d"%id(a)) """ a=1537455136 b=1537455136 c=1537455168 b=1537455200 a=1537455200 """
list1 = [1, 2] list2 = [1, 2] list3 = list1 print("list1=%d"%id(list1)) print("list2=%d"%id(list2)) print("list3=%d"%id(list3)) print(list1) print(list3) list3[1] = 3 print("list3=%d"%id(list3)) print(list1) print(list3) """ list1=41797832 list2=41797896 list3=41797832 [1, 2] [1, 2] list3=41797832 [1, 3] [1, 3] """