小数据池,深浅拷贝以及集合

小数据池,深浅拷贝以及集合

一.小数据池

小数据池的验证方法必须脱离代码块才能进行验证

驻留机制--先执行代码块的规则,再执行小数据池的规则

1.小数据池 --缓存机制(驻留机制)

小数据池的支持数据类型和范围:

  • 数字
    • -5 ~ 256
  • 字符串
    • 在同一个代码块下,只要内容相同就采用相同的内存地址
    • 字符串做乘法的时候总长度不能超过20
    • 中文和特殊符号乘法的时候乘以0
  • 布尔值
    • 在同一个代码块下,只要内容相同就采用相同的内存地址

2.代码块

一个文件,一个函数,一个模块,一个类,终端中一行就是一个代码块.

代码块的支持数据类型和范围

  • 数字
    • 在同一个代码块下,只要内容相同就采用相同的内存地址(-5以后不是)
    • 数字在做乘法的时候范围 -5 ~ 256
    • 数字在做乘法的时候不能使用浮点数
  • 字符串
    • 在同一个代码块下,只要内容相同就采用相同的内存地址
    • 字符串进行乘法的时候总长度不能超过20
    • 中文和特殊符号乘法的时候只能乘以1或0
  • 布尔值
    • 在同一个代码块下,只要内容相同就采用相同的内存地址二.

二. == 和 is

  • == 判断等号两边的值是否相等
  • is 判断两边的值内存地址是否相同

三.深浅拷贝

1.赋值

赋值: 多个变量名指向同一个内存地址,一个变量对其进行操作后,其他变量进行查看时都变动

lst = [1,2,3,[5,6,7]]
lst1 = lst
print(lst)
print(lst1)     #[1,2,3,[5,6,7]]
                #[1,2,3,[5,6,7]]

2.浅拷贝

  • 浅拷贝的时候只拷贝第一层元素
  • 浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
  • 浅拷贝在替换第一层元素内的(可变数据类型)时候,拷贝出来的新列表进行改变
  • 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变
  • lst[:] --是浅拷贝
lst =[1,2,3,[6,7,8]]
lst1= lst
lst[-1].append(9)
print(lst)
print(lst1)      #[1, 2, 3, [6, 7, 8, 9]]
                 #[1, 2, 3, [6, 7, 8, 9]]

1729481-20190711204117985-386529618.png

浅拷贝

lst = [1,2,3[6,7,8]]
lst1 = lst.copy()
print(lst)
print(lst1)     #[1,2,3,[6,7,8]]
                #[1,2,3,[6,7,8]]

1729481-20190711204110174-1889007064.png

lst = [1,2,3,[6,7,8]]
lst1 = lst.copy()
lst[-1].append(9)
print(lst)
print(lst1)      #[1, 2, 3, [6, 7, 8, 9]]
                 #[1, 2, 3, [6, 7, 8, 9]]

1729481-20190711204100824-2061857857.png

lst = [1,2,3,[6,7,8]]
lst1 = lst.copy()
lst[3] = 9
print(lst)
print(lst1)        #[1, 2, 3, 9]
                   #[1, 2, 3, [6, 7, 8]]
  
lst = [1,2,3,[5,6,7,[8,9]]]
lst1 = lst.copy()
lst.append(10)
print(lst)
print(lst1)       #[1, 2, 3, [5, 6, 7, [8, 9]],10]
                  #[1, 2, 3, [5, 6, 7, [8, 9]]]

    
lst = [[1,2,],90,6,7,[5,6]]
lst1 = lst.copy()
lst[-1] = 8
print(lst)
print(lst1)      #[[1, 2], 90, 6, 7, 8]
                 #[[1, 2], 90, 6, 7, [5,6]]    
        
lst = [1,2,3,4,[5,6,7,[8,9]]] 
lst1 = lst.copy()
lst[-1][-1] = "56"
print(lst)
print(lst1)      #[1, 2, 3, 4, [5, 6, 7, '56']]
                 #[1, 2, 3, 4, [5, 6, 7, '56']]

dic = {"alex":[1,2,3,[5,6]]}
dic1 = dic.copy()
dic["alex"][-1] = "56"
print(dic)
print(dic1)     #{'alex': [1, 2, 3, '56']}
                #{'alex': [1, 2, 3, '56']}

3.深拷贝

  • 不可变的数据类型共用,可变的数据类型重新开辟空间
  • 对源数据进行修改,深拷贝的内容不进行修改

1729481-20190711204052041-1998785759.png

import copy
lst = (1,2,3,[5,6,7])
lst1 = copy.deepcopy(lst)
lst[-1].append(8)
print(lst)
print(lst1)            #(1, 2, 3, [5, 6, 7, 8])
                       #(1, 2, 3, [5, 6, 7])

四.集合(set)

  • 没有值的字典
  • 无序,不支持索引
  • 天然去重

定义集合 s = {1,"alex",False}

增:

s = {"刘嘉玲", '关之琳', "王祖贤"}

#添加 s.add()
s.add("郑裕玲") # 重复的内容不会被添加到set集合中
print(s)


#迭代添加 s.update()
s.update("麻花藤") 
print(s)
s.update(["张曼⽟", "李若彤","李若彤"])
print(s)

删:

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}

# s.pop()     # 随机弹出⼀个.

#s.remove()    # 直接删除元素

s.remove("⻢⻁疼") # 不存在这个元素. 删除会报错


#s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set()

改:

# set集合中的数据没有索引. 也没有办法去定位⼀个元素. 所以没有办法进⾏直接修改.
# 我们可以采⽤先删除后添加的⽅式来完成修改操作
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改成赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)

查:

# set是⼀个可迭代对象. 所以可以进⾏for循环
for el in s:
 print(el)

常用操作

s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}

# 交集(&)
# 两个集合中的共有元素
print(s1 & s2) # {'⽪⻓⼭'}
print(s1.intersection(s2)) # {'⽪⻓⼭'}

# 并集(丨)
print(s1 | s2) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
print(s1.union(s2)) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}

# 差集(-)
print(s1 - s2) # {'赵四', '刘能'} 得到第⼀个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}

# 反交集(^)
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
print(s1.symmetric_difference(s2)) # {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪⻓⼭"}

# ⼦集(<)
print(s1 < s2) # set1是set2的⼦集吗? True
print(s1.issubset(s2))

# 超集(>)
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))


#冻结集合
s = frozenset(["赵本⼭", "刘能", "⽪⻓⼭", "长桂"])
dic = {s:'123'}   # 可以正常使⽤了
print(dic)

转载于:https://www.cnblogs.com/tutougold/p/11172601.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值