小数据池 深浅拷贝 集合

小数据池

小数据池 ———— 缓存机制(驻留机制)

  1. == 判断两边的内容是否相等
  2. a = 10
    b = 10
    print(a == b)
    # True

    is 判断两边的值内存地址是否相等

    a = 10
    b = 10
    print(a is b)
    # True
    print(id(a))
    print(id(b))
    #True
    4329728336
    
    地址是一样的

小数据池的数据范围: -5 ~ 256

a = -5
b = -5
c = -5
print(id(a))
print(id(b))
print(id(c))

代码块

:一个文件 一个函数 一个类 一个模块 终端中每一行是一个代码块

? 支持: 数字 字符串 布尔值

  • 数字: 在同一代码块下,只要内容相同就采用相同的内存地址
  • 数字在做乘法的范围-5~256
  • 数字在做乘法的时候不能使用浮点数

字符串

  • 在同一代码块下,只要内容相同就要采用相同的内存地址
  • 乘法的时候总长度不能超过 20
  • 乘法的时候中文,特殊符号乘以 1 或 0

布尔值

在同一代码块下,只要内容相同就采用相同的内存地址

小数据池

数字

  • ? -5 ~256

布尔值

  • 在同一代码块下,只要内容相同就采用相同的内存地址
  • 乘法的时候中文符号乘以 0 (没有 1)
  • 乘法的总长度不能超过 20

补充:小数据池的验证方法,必须先脱离代码块才能进行验证,先执行代码块的规则,再执行小数据的规则 (驻留机制)

深浅拷贝

浅拷贝定义 : 复制一份

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

#
[1, 2, 3, [5, 6, 7, 8]]
[1, 2, 3, [5, 6, 7, 8]]
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()    #新开辟了一个空间
print(lst1)
print(lst)
print(id(lst1))
print(id(lst))

#
[1, 2, 3, [5, 6, 7]]
[1, 2, 3, [5, 6, 7]]
4450516552
4450515208     #即使表面上都是一样的,但是地址不一样
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()
lst1[-1].append(8)   #浅拷贝的时候,只会开辟一个新的容器,其他元素使用的都是源列表中的元素
print(lst)
print(lst1)
#
[1, 2, 3, [5, 6, 7, 8]]
[1, 2, 3, [5, 6, 7, 8]]   ##第二层里的数据变化就变了
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()
lst[0]=11
print(lst)
print(lst1)

#
[11, 2, 3, [5, 6, 7]]
[1, 2, 3, [5, 6, 7]]    #第一层的数据变化  后面就不变 
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()
lst[3][0] = 567
print(lst)
print(lst1)

#
[1, 2, 3, [567, 6, 7]]
[1, 2, 3, [567, 6, 7]]

浅拷贝:浅拷贝的时候,只拷贝第一层元素.浅拷贝在修改第一层元素的时候(不可变数据类型),拷贝出来的新列表不进行改变

浅拷贝在修改第一层元素(可变数据类型)的时候,拷贝出来的新列表进行改变

浅拷贝在修改第一层元素中的元素的时候,拷贝出来的新列表进行改变

深拷贝

深拷贝开辟一个容器空间,不可变数据共用,可变数据类型(再次开辟一个新的空间),空间里的值不可变的数据进行共用,可变的数据类型再次开辟空间

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

性质: 1. 没有值的字典,无序不支持索引 2. 最大的作用就是天然去重 (字典中键唯一)

定义集合

s = {1,"alex",False,(1,2,3)}    不支持列表

面试题

给你一个列表,让你去重,首先去重转化为集合,然后转化为列表

lst = [1,2,1,2,4,2,45,3,2,45,2345]
print(list(set(lst)))
  1. s.add( )

    s = {1,2,3,4}
    s.add("89")   #只能添加一个
    print(s)
    #{1, 2, 3, 4, '89'}
  2. s.update( )
s = {1,2,3,4}
s.update("今天")
print(s)

#{1, 2, 3, 4, '今', '天'}
  1. s.pop( )

    s = {1,2,3,4}
    s.pop()
    print(s)
    #{2, 3, 4}    #随机删除,集合是无序的
  2. s.remove()
s = {1,2,3,4}
s.remove(3)   #指定元素删除
print(s)
#{1, 2, 4}
  1. s.clear( )
s = {1,2,3,4}
s.clear()
print(s)
#set()   #直接清空了,一般不建议使用

先删再加

for i in {1,2,3}:
    print(i)
#
1
2
3

其他操作

s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,31,1,2314}
print(s1&s2)           #交集
print(s1 | s2)         #并集
print(s1 - s2)         #差集
print(s1 ^ s2)         #反交集
print(s1 > s2)         #父集(超集)   父亲里都包含儿子里的就是父集
print(s1 < s2)         #子集    同样 你没有人家多  你当然当儿子
#
{1, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7, 2314, 31}
{2, 3, 4}
{2, 3, 4, 2314, 31}
False
False

今日总结

1.小数据池

? 1.1 代码块:一个文件,一个函数, 一个类,一个模块 终端有一行

? 1.1.1 数字 : -5~256

? 1.1.2 字符串:乘法时总长度不超过 20

? 1.1.3 布尔值 : 内容相同,内存地址也相同

1.2 小数据池

? 1.2.1:数字:-5~256

? 1.2.1: 字符串:乘法时总长度不超过 20

? 1.2.3:内容相同内存地址也相同

? 1.3 先执行代码块,再执行小数据池

? 1.4 == is

? 1.4.1:== 判断等号两边的值是否相等

? 1.4.2:==判断两边的内存地址是否相等

2.深浅拷贝

2.1 : 赋值

? 多个变量名指向同一个内存地址

? 一个变量对其进行操作,其他变量查看时都变动

2.2 : 浅拷贝

? 浅拷贝只拷贝第一层元素

? 修改第一层元素时,新开辟的不进行改变

? lst [: ]

2.3 : 深拷贝

? 不可变的数据类型共用,可变的数据类型重新开辟一个空间

? 对源数据进行修改,深拷贝的内容不进行改变

3.集合

? 3.1:集合是没有值的字典

? 3.2:集合是无序,可变

? 3.3 集合天然去重

? 3.4 增: add. update

? 删: pop. remove clear

? 改: 先删再加

? 查: for 循环

? 3.5 其他操作

? & 交集 | 并集 - 差集 ^反交集 >超集 < 子集

? 3.6:面试题

? List(set(要去重的数据))

原文地址:https://www.cnblogs.com/hualibokeyuan/p/11171908.html

时间: 2024-08-02 23:39:19

小数据池 深浅拷贝 集合的相关文章

小数据池 深浅拷贝

代码块,小数据池 在Python中id是内存地址, 只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加到内存中,这个空间是有一个唯一标识的,就好比是身份证号,标识这个空间的叫做内存地址,也就是这个数据(对象)的id,可以利用id()去获取这个数据的内存地址: s = "abc" print(id(s)) #2690615639712 is 和 == ==是比较两边数据是否相等,而is是判断两边内存地址是否相等.如果两边内存地址相等,那么实际是指向同一个内存地址. 内

集合以及深浅拷贝和和小数据池--个人一些经验总结

小数据池 --缓存机制 ==哦按段两边你的内容是否相等 a=10 b=10 print(a==b) is 是 a=10 b=10 print(a is b) is 判断机遇内存地址就行判断 print(id (a)) print(id(b)) 小数据池的数字范围:-5~256 代码块:一个py文件 一各函数 一个类 一个模块,终端中每一行都是一个代码块 支持三种数据类型 数字:在同一个代码块下,只要内容相同就采用相同的内存地址(-5以后就不是) 数字在做乘法的时候范围-5~256 1252 在

python入门(四)小数据池、深浅拷贝、集合

3.8 小数据池 小数据池:缓存机制(驻留机制) ==(用于判断两边的内容是否相等) a=10 b=10 print(a==b)# ==用于判断两边的内容是否相等 is(用于判断两边内存地址是否相等) a=10 b=10 print(a is b) #输出 True #小数据池总结 #1.数字范围:-5~256 #2.字符串: """ 1.同一代码下,内容相同则内存地址相同 2.乘法相乘总长度不能超过20 3.惩罚的时候中文.特殊符号乘以0 """

小数据池 集合 深浅拷贝

小数据池 集合 深浅拷贝 一.小数据池 定义:小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址,支持数据类型:str,int,bool是一种缓存机制,特被称为驻留机制,各大编程语言中都有类似的东西. id() ----- 查看元素的内存地址 is 与 == 的区别 is 判断两个元素的内存地址是否相等 == 判断等号左右两边的元素的值是否相等 小数据池的规则 数字:-5~256 字符串: 字符串在做乘法(乘数不为1)的时候总长度不能超过20 自己定义的字符串的长度不受限

小数据池、集合和深浅拷贝的个人理解

小数据池----缓存机制(驻留机制) ==:判断两边内容是否相等 is :判断基于内存地址进行判断 小数据池的数字范围-5~256 代码块:一个文件.一个函数.一个模块,终端中每一行是一个代码块 代码块支持的数据类型:数字:在同一个代码块中.只要内容相同就采用相同的内存地址(-6往后都不是)在做乘法的时候范围-5~256.数字在做乘法的时候不能使用浮点数(这些都是在cham中的结果) 字符串:在同一代码块中,只要内容相同就采用相同的内存地址.乘法的时候总长度不能超过20.乘法的时候中文.特殊符号

python基础4(小数据池,编码,深浅拷贝)

1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num1 = 3 num2 = 3 i1 = id(num1) i2 = id(num2) #此时i1==i2 3.编码 ascii:     8位       1字节     表示一个字符 unicode:  32位     4字节     表示一个字符 utf-8 英文    8位    1字节 欧洲

小数据池和深浅拷贝

小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于一个字符时会缓存 超过一个字母但是只有下划线,字母,数字组成也会缓存 如果字符串乘法,那小于等于20个就会缓存,超过则开辟新的内存 手动缓存,需要调用工具 from sys import intern a=intern("[email protected]"*5) b=intern(&qu

Python基础之小数据池及深浅拷贝

一.小数据池 == (等于) == 官方:判断等号两边的内容是否相同 ? 白话:判断两个人长得是不是一样 is ? 官方:判断两边的内容是不是一个 ? 白话:判断这两个人是不是一个人 a = 10000 b = 10000 print(a == b) is 是通过内存地址进行判断 print(id(a),id(b)) 输出结果 ,内存地址一致 代码块:一个py文件,一个函数,一个模块,一个类,交互模式(终端)下的每一行 先执行代码块,然后小数据池! 代码块机制内容:Python在执行同一个代码块

相识python 之小数据池 集合

?一. ?小数据池 在说?小数据池之前. 我们先看?一个概念念. 什什么是代码块: 根据提示我们从官?方?文档找到了了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class