18年3月python3.x知识回顾(变量地址的分配)

引用类型,通过赋值,内存地址不变,通过另外修改数据之后,内存还是不变,
也不是说,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]
"""

猜你喜欢

转载自blog.csdn.net/fm345689/article/details/79779705