lt = [1, 3, 5, 6]
a = len(lt)
print("a = ", a)
print("len(lt) = ", len(lt))
print("id(a) = ", id(a))
print("id(len) = ", id(len(lt)))
lt.pop()
print('*'*50)
print("a = ", a)
print('len(lt) = ', len(lt))
print("id(a) = ", id(a))
print("id(len) = ", id(len(lt)))

老师,想问一下我的理解是否是正确的,我的理解如下:
创建了对象1:第一次计算出的列表lt的长度
a1(第一次打印a的值):引用了len1
然后我删除了lt中的一个元素
创建了对象2:第二次计算出列表lt的长度
a2(第二次打印a的值):依然引用len1
len2没有被其他变量引用,所以等print调用len2结束后,len2被Python的垃圾回收机制回收,但是len1由于a的引用,依然在内存中占据一块空间。
由于len1计算出来的值为数值类型,数值类型为不可变对象,所以a依然指向原来的len1,len2为后面创建的新对象,不同的对象具有不同的id,所以len1和len2的id不同