python集合深浅copy

01昨天内容回顾

代码块:由一个文件,一个函数,一个模块,一个类,交互模式下每一行都是一个代码块

Is == id:id()是查询内存地址,==比较两边的值,is是比较两边的内存地址。

小数据池:

在内存中创建一个池,提前存放了-5~256的整数,一定规则的字符串,后续程序中,如果设置的变量指向的是小数据内容,那就不会再内存中重新创建。

1.节省内存

2.提高性能和效率。

小数据池和代码块的关系。

同一个代码块:python在执行时,遇到了初始化对象,他会将这个变量和数值放在一个字典中,再次遇到他会从这字典中寻找。

不同代码块:python执行中,直接从小数据池中寻找。满足条件id相同。

编码:

Str》bytes:encode

Bytes》str:decode

02作业讲解

03 基础数据类型补充

元祖:如果元祖中只有一个数据,且没有逗号,则还‘元祖‘与里面的数据的数据类型相同。Print()将会得到是属于元素的类型 ,得到的不是元祖。

Tu1=(1)

Print(tu1)得到的是元素

Tu1=(1,)

Tu2=(‘alex’,)

Tu3=(【1,2,3】,)

列表,元组,字符串互相转换

列表和元组转换为字符串则必须依靠join函数

列表:列表和列表可以相加

L1=【1,2,3】

L2=【‘alex’,‘wusir’】

L3=l1+l3

Print()

在循环一个列表时,如果对列表中的某些元素进行删除,

那么次元素后面的所有元素就会前进一位,他们索引位置 就会变,所以不能在循环的时候,进行增删

Eg:# for i in range(len(li)-1,-1,-1):
#     if i %2==1:
#         li.pop(i)
# print(li)

字典

Dic1=dic.fromkeys([1,2,3],’alex’)

Print(dic1)

在循环一个字典时,不能改变字典的大小(就是不能增减)。

数据类型的转换。

Int str bool 转换

Str《》types

Str《》list:字符串转换列表时用split,而list转换为字符串时,必须list全是字符串。

04集合set

增:有add。update#update:迭代着增加
set1.update(‘A‘)print(set1)
set1.update(‘老师‘)print(set1)
set1.update([1,2,3])print(set1)

删:

set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
 
set1.remove(‘alex‘)  # 删除一个元素print(set1)
 
set1.pop()  # 随机删除一个元素print(set1)
 
set1.clear()  # 清空集合print(set1)
del set1  # 删除集合print(set1)

Set:

{‘name’,‘alex’,1,2,3}

集合要求里面的元素必须是不可变的数据类型,但本身是可以变得,集合里面的元素不重复,无序。

主要用途:

  1. 去重,
  2. 关系测试。

List去重

li=[1,2,2,3,4,6,1,3,]
# set1=set(li)
# li=list(set1)
# # print(set1)
# print(li)
集合比如#
 set1=set({1,2,3})
# set2=set1
# print(id(set1),id(set2))
地址是不一样的。
 
 
 
  1. 关系测试

交集&intersection

并集|union

差集—difference

反交集^ 或者 symmetric_difference

子集和超集

05   浅度copy

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

l1 = [1,2,3,[‘barry‘,‘alex‘]]

l2 = l1.copy()

print(l1,id(l1))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895816

print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895048

l1[1] = 222print(l1,id(l1))  # [1, 222, 3, [‘barry‘, ‘alex‘]] 2593038941128print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2593038941896

l1[3][0] = ‘wusir‘

print(l1,id(l1[3]))  # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016

print(l2,id(l2[3]))  # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016

05 深度copy

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

import copy

l1 = [1,2,3,[‘barry‘,‘alex‘]]

l2 = copy.deepcopy(l1)

print(l1,id(l1))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167816

print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048

l1[1] = 222

print(l1,id(l1))  # [1, 222, 3, [‘barry‘, ‘alex‘]] 2915377167816

print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048

l1[3][0] = ‘wusir‘

print(l1,id(l1[3]))  # [1, 222, 3, [‘wusir‘, ‘alex‘]] 2915377167240

print(l2,id(l2[3]))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167304

原文地址:https://www.cnblogs.com/13507215809qwer-/p/9512703.html

时间: 2024-11-09 07:26:53

python集合深浅copy的相关文章

Python 集合 深浅copy

一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. 1,集合的创建. set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'} 2,集合的增. set1 =

【python】-- 深浅copy、集合

深浅copy 1.数字.字符串的copy: 赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都一样,因为它们永远指向同一个内存地址: >>> import copy >>> n1 = 123 >>> print(id(n1)) #打印n1的内存地址 502665488 ##赋值## >>> n2 = n1 >>> print(id(n2)) 502665488 ##浅拷贝## >>>

python之深浅copy

三.深浅copy调用方法:import copy #浅拷贝copy.copy() 深拷贝copy.deepcopy() #赋值1. 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址.举例:import copy#字符串,数字a1 = 'adddddd'a2 = '12322'a2 = a1print(id(a1))print(id(a2))a3 = copy.deepcopy(a1)print(id(a1))print(id(a3))输出结果:4192344

python的深浅copy

#!/usr/bin/env python #-*- coding:utf-8 -*- a='abc' b=a a='def' print(b) #这里打印的是abc #1.执行a = 'abc',解释器创建了字符串'abc'和变量a,并把a指向'ABC' #2.执行b=a,解释器创建了变量b,并把变量b指向了变量a所指向的abc #3.执行a = 'def',解释器创建了字符串'def',并把a的指向改为'def',但b并没有更改: #所以最后打印的是abc name={ "z":{

python 列表深浅copy 及相关操作

1.浅COPY,如果源变化,p1[1][1].p2[1][1].person[1][1]会一起变化 import copyperson = ['name',['saving',100]]'''p1 = copy.copy(person)p2 = person[:]p3 = list(person)'''p1 = person[:]p2 = person[:]print(p1)print(p2) p1[0] = 'alex'p2[0] = 'fengjie'print(p1)print(p2) p

set集合,深浅copy

一基础数据类型补充: 1.jion,把列表转换成字符串 s=['多闻天王,增长天王,持国天王,广法天王'] s2=s.join('*') print(s2) #多闻天王*增长天王*持国天王*广法天王 2.列表list里的元素不能直接删除.适用于字典dict 原因:for的运行过程,会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个,然后获取到第0个元素,紧接着删除第0个.这个时候,原来的第一个元素会自动的变成第0个,然后指针向后移动一次,指向1元素.这时原来的1已经变成了0,也就

python之深浅copy与id

我们都知道 所谓变量就是就是在空间中开辟一块内存空间.来存放东西的 学过c语言的都知道而数组也是有内存地址的 我们如何来查看内存地址呢?id()这函数就来了 x = 5 print(id(x)) 如此一来我们就可以查看x的内存地址了他的内存地址是 1940307088 首先我们来看一个现象 我们把数组赋值给一个变量a 然后在把a赋值给b 在来改变a的值 看看b 是否会发生变化呢? a = [1,2,3] b = a a[0] = 11 print(b) 得出的结果是 [11, 2, 3] 很显然

python之集合、深浅copy、文件操作、函数初识

本节内容:集合.深浅copy.文件操作.函数初识 1.小知识点补充 2.编码二 3.集合 4.深浅copy 5.文件操作 6.函数的初识 1.小知识点补充                                                                                           1.1 小数据池====str.int 小数据池存在的意义就是节省内存 节省内存,位多个变量开辟一个共享空间(str和int) int:-5--256 int===

python之数据类型补充、集合、深浅copy

一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址. 小数据池: 前提:int,str,bool 1,节省内存. 2,提高性能和效率. 小数据池是什么? 在内存中,创建一个'池',提前存放了 -5 ~256 的整数,一定规则的字符串和bool值. 后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建. 小数据池与代码块的关系