小数据池、深浅拷贝和集合

小知识

import copy

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

== ——判断两边的值是否相等

a = 10
b = 10
print(a == b)

is——基于内存地址判断

a = 10
b = 10
print(a is b)

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

支持的类型:数字 字符串 布尔值

数字:-5~256——面试会问

字符串:在同一个代码块下 只要内容相同就采用的相同的内存地址

字符串在做乘法的时候长度不能超过20

​ 字符串在做乘法的时候中文和特殊符号只能乘以1

布尔值:在同一个代码块下 只要内容相同就采用的相同的内存地址

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

代码块:

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

支持的数据类型:数字 字符串 布尔值

数字: 在同一个代码块下 只要内容相同就采用的相同的内存地址(小于-5的就不是了),

​ 数字在做乘法的时候范围-5~256

​ 数字在做乘法的时候浮点数不好使了

字符串: 在同一个代码块下 只要内容相同就采用的相同的内存地址

字符串在做乘法的时候长度不能超过20

​ 字符串在做乘法的时候中文和特殊符号乘以1或0

布尔值 :在同一个代码块下 只要内容相同就采用的相同的内存地址

先执行代码块的规则,在执行小数据池的规则——(驻留机制)

面试必问深浅拷贝:(复制)

赋值 浅拷贝 深拷贝

赋值

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

浅拷贝 copy()

切片是浅拷贝

lst2=lst.copy()
print(lst)
print(lst2)
print(id(lst))
print(id(lst2))
lst2[-1].append(9)
print(lst)
print(lst2)
lst[0]=10
print(lst)
print(lst2)

结果
[1, 2, 3, [5, 6, 7]]
2145917876488
2145947661896
[1, 2, 3, [5, 6, 7, 9]]
[1, 2, 3, [5, 6, 7, 9]]
[10, 2, 3, [5, 6, 7, 9]]
[1, 2, 3, [5, 6, 7, 9]]

浅拷贝的时候只会开辟一个新的容器列表,其他的元素使用的都是原列表的地址,

在修改新拷贝出列表中不可变元素的时候,原列表不改变,

在修改新拷贝出列表中可变元素的时候,原列表不改变,

在给新拷贝出的列表中可变数据类型进行增删改,原数据也跟着改变

浅拷贝只拷贝第一层元素

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

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

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

深拷贝:

import copy

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

深拷贝开辟一个容器空间(列表),不可变数据类型共用一个地址,可变数据类型开辟一个新的空间,空间里的值是不可变的数据使用的是共用的,可变的数据再次开辟一个新的空间

集合:set——没有值的字典

无序的(不可以索引)元素:不可变数据类型

空集合--set()

天然去重

定义

增:

add()#添加一个元素

update()#迭代添加

删:

pop()有返回值,随机删除

remove()指定元素删除

clear() 清空

改:

先删除在加

查:

for循环

其他的操作:

&——求交集

|——并集

- ——差集

^ ——反交集

> ——父集(超集)

<——子集

frozenset()——冻结集合

原文地址:https://www.cnblogs.com/ciquankun/p/11170172.html