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(对象)) #查看这个对象被引用的次数