python动态类型简介

  

1、a = [1,2,3]其中a是变量名,[1,2,3]是对象,a通过一个指向[1,2,3]的指针引用了对象[1,2,3].
2、每一个对象都有两个标准的头部信息,一个是标示这个对象的类型。另外一个是用来决定是不是可以回收这个对象。
3、类型属于对象,而不属于变量,所以a=3,a='spam',a=[1,2,3]没有类型的变量a可以指向不同类型对象
4、垃圾回收机制:每一个对象内部都有一个计数器,这个计数器中记录的是引用该对象的引用数目,一旦这个对象的计数器被设置为0,这个对象的内存空间自动回收。
5、案例:
	a=3
	b=a
	a=a+2
	输出:a=5,b=3
	分析:当给一个变量赋予一个新的值是,并不是替换原始的对象,而是让这个变量去引用完全不同的对象。就是说a=a+2并不是修改a指向的那块内存区域,而是在另外一个地方重新创建一个新的值。
6、复制
	列表L,集合S,字典D都有都有copy方法,例如L.copy(),S.copy(),D.copy()
	模块copy中有两个复制方法:
	一个会死copy.copy(L)
#7、在python中缓存并复用了小的整数和小的字符串

                例如:

                L = [1,2,3,4]

                M = L

                print(L == M)  #输出true

                print(L is M)  #输出True

                这表示L和M 指向了同一个对象 ,并且值相等

                L = [1,2,3,4]

                M = [1,2,3,4]

                print(L == M)  #输出true

                print(L is M)  #输出False

                这表示L和M值相等,但是不指向同一个对象

                X = 42

                Y = 42

                print(X == Y)  #输出true

                print(X is Y)  #输出True

                这表示X和Y 指向了同一个对象 ,并且值相等这是因为小的整数和字符串被缓存了

#8、如果想查看一个对象被引用的次数,则可以通过sys模块的getrefcount方法

                import sys

                print(sys.getrefcount(对象))  #查看这个对象被引用的次数

  

原文地址:https://www.cnblogs.com/hbcb533/p/3669280.html