zoukankan      html  css  js  c++  java
  • 小数据池、代码块以及深浅拷贝

    1.小数据池

    # 小数据池 -- 缓存机制(驻留机制)
    # == 判断两边内容是否相等
    a = 10
    b = 10
    print(a==b)
    
    # is 是
    a = 10
    b = 10
    print(a is b)  # True is 判断基于内存地址进行判断
    
    # 小数据池的数字范围: -5 ~ 256
    # 代码块:一个文件,一个函数,一个类,一个模块,终端中每一个行是一个代码块
    # 支持:
    # 数字:
    	# 在同一代码块下 只要内容相同就采用相同的内存地址(-5~正无穷)
        # 数字在做乘法的时候范围-5~256 ****
        # 数字在做乘法的时候不能使用浮点数
    # 字符串:
    	# 在同一代码块下 只要内容相同就采用相同的内存地址
        # 乘法的时候总长度不能超过20  ****
        # 乘法的时候中文,特殊符号乘以1或0
    # 布尔值:
    	# 在同一代码块下 只要内容相同就采用相同的内存地址
    
    # 小数据池
    # 数字: -5~256
    # 字符串:
     	# 在同一代码块下 只要内容相同就采用相同的内存地址
        # 乘法的时候总长度不饿能超过20 ****
        # 乘法的时候中文,特殊符号乘以0
    # 布尔值
     	# 在同一代码块下 只要内容相同就采用相同的内存地址
        # 小数据池的验证方法,必须脱离代码块才能验证
        # 先执行代码块的规则,再执行小数据的规则 --(驻留机制)
        
    # 必会:
     # == 判断等号两边的值是否相等
     # is 判断两边的内存地址是否相等 
    

    2.深浅拷贝

    # 深浅拷贝 复制
    # 面试必问,赋值,浅拷贝,深拷贝
    
    # 赋值
    lst = [1,2,3,4,5,[6,7,8]]
    lst1 = lst
    print(lst1)
    print(lst)
    lst1[-1].append(8)
    print(lst1) # 输出 [1,2,3,4,5,[6,7,8,9]]
    print(lst) # 输出[1,2,3,4,5,[6,7,8,9]]
    
    # 浅拷贝
    # 浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是列表中的元素
    lst = [1,2,3,4,5,[6,7,8]]
    lst1 = lst.copy()
    lst1[-1].append(9)
    print(lst) 
    print(lst1) # 两个都变 [1,2,3,4,5,[6,7,8,9]]
    
    lst = [1,2,3,4,5,[6,7,8]]
    lst1 = lst.copy()
    lst[-1] = 1
    print(lst) # [1,2,3,4,5,1]
    print(lst1) # [1,2,3,4,5,[6,7,8]]
    
    lst = [1,2,3,4,5[6,7,8,[9,10]]]
    lst1 = lst.copy()
    lst1.append(11)
    print(lst) # 变 
    print(lst1) # 不变
    
    lst = [[1,2],90,6,7,[5,6]]
    lst1 = lst.copy()
    lst1[-1] = 8
    print(lst) # 不变
    print(lst1) # 变
    
    dic = {"alex":[1,2,3,[5,6]]}
    dic1 = dic.copy()
    dic["alex"][0] = "57"
    print(dic) # 变
    print(dic1) # 变 字典的值就相当于二级列表
    
    # 深拷贝
    import copy 
    lst = [1,2,3,[5,6,7]]
    lst1 = copy.deepcopy(lst) # 深拷贝
    lst[-1].append(8)
    print(lst) # 变
    print(lst1) # 不变
    
    lst = [1,2,3,4,[5,16,7,[8, 10, 9]]]
    import copy
    lst1 = copy.deepcopy(lst)
    print(id(lst[-1][-1]))
    print(id(lst1[-1][-1])) # 内存地址
    
    # 总结
    # 浅拷贝的时候只拷贝第一层元素
    # 浅拷贝在修改第一次元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
    # 浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变
    # 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变
    
    # 深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行公用时,可变的数据类型再次开辟空间
    
  • 相关阅读:
    微信公众号教程(5)自动回复操作案例
    微信公众号教程(4)微信公众平台编辑模式介绍
    微信公众号教程(3)微信公众平台群发消息
    微信公众号教程(2)微信公众平台后台介绍
    微信公众号教程(1)微信公众账号注册、设置、登陆
    二级c程序设计题(2)
    二级c程序设计题(1)
    C++经典编程题#6:分配病房
    C++经典编程题#5:寻找下标
    python-----面向对象三大特性
  • 原文地址:https://www.cnblogs.com/alex3174/p/11172538.html
Copyright © 2011-2022 走看看