"""
    Python核心总复习(1)
    一、Python简介
        1. 执行方式
            交互式
                打开终端 --> python3
            文件式
                打开终端 --> cd 到模块的目录 --> python3 模块名.py
        2. 执行过程
                源代码  -编译-> 机器码
                源代码  -解释-> 机器码
                源代码  -"编译"-> 字节码 -解释-> 机器码
                |---第一次(被导入)---|
    二、数据基本运算
        1. pycharm常用快捷键(百度搜索)
        2. 变量：操作数据
        3. 运算符
            身份运算符:判断变量存储的地址  is
            == ： 判断变量所存储的内容

    三、Python自动化内存管理机制
        1. 引用计数：
            每个对象记录被变量绑定(引用)的数量,当为0时被销毁。
            缺点-循环引用：
                垃圾存储了垃圾,不销毁,始终在内存中存在.
        2. 标记清除
            全盘扫描内存,标记不再使用的对象.
            缺点：性能太差
        3. 分代回收
            将内存分为三代,
            每次创建新数据,在第一代分配空间。
            如果空间不足,触发标记清除.
            会将有用的数据升代.
            无用数据清空,再从头存储数据。
        优化内存
            尽少产生垃圾、对象池、设置垃圾回收机制参数
"""
data01 = "悟空"  # 1
data02 = data01  # 2
data03 = data02  # 3
data01 = "八戒"  # "悟空" 引用计数减少　2
del data02  # 1
data03 = None  # 0   此时悟空被销毁(依然占用内存,只是不再使用)

# 循环引用
list01 = []
list02 = []
list01.append(list02)
list02.append(list01)
del list01, list02

# 每次循环产生垃圾,会加快芬待回收的步伐.
str_result = ""
for number in range(10):
    str_result += str(number)

# 整数对象池
# 小数对象池
# 字符串对象池
# ...
# 对象池：每当创建数据时,都会现在池中判断是否存在相同数据。
#        如果没在创建新数据,如果存在返回数据内存地址。
# 优点：提高内存利用率
data01 = [10]
data02 = [10]
print(id(data01), id(data02))

list01 = [10]
list02 = [10]
# False
print(list01 is list02) # id(list01) == id(list02)
print(list01 == list02)

a = 10
b = 10
print(a is b)# True (因为对象池,所以变量ab存储的是一个数据)