基础数据类型的补充和深浅copy
一:关于str 的操作方法补充
1,s.isspace() 判断字符串是否只由空格组成,是,为True,否则,为False。
s = ' ' #只能是以至少一个空格组成的字符串(全空格)
print(s.isspace())
二:关于tuple类型的补充
当元组只有一个元素组成并且没有逗号,则该元素是什么数据类型,整体就是什么数据类型。
tu = ('alex')
tu1 = ('alex',)
print(tu,type(tu))
print(tu1,type(tu1))
tu = ([1,2,3])
tu1 = ([1,2,3],)
print(tu,type(tu))
print(tu1,type(tu1))
tu.append('')
print(tu)
三:关于list的方法补充
在循环一个列表时,如果要是删除某些或者某类元素,容易出错,因为在依靠索引删除元素时,列表的的长度会发生变化,最终会导致索引超出列表长度范围。如将列表 l1 = [111,222,333,444,555] 将索引为基数位的元素删除。有以下三种方法,程序如下。
# 方法一:
l1 = [111,222,333,444,555]
l2 = []
for i in range(len(l1)):
if i % 2 == 0:
l2.append(l1[i])
l1 = l2
print(l1) #方法二:
l1 = [111,222,333,444,555,666,777]
del l1[1::2]
print(l1) #方法三
l1 = [111,222,333,444,555]
for i in range(len(l1)-1,0,-1):
if i % 2 == 1:
del l1[i]
print(l1)
四:关于dict的方法补充
1,关与dict.fromkeys()的用法
dic = dict.fromkeys('abc','alex')
print(dic) #{'a': 'alex', 'b': 'alex', 'c': 'alex'}
dic1 = dict.fromkeys([1,2,3],[])
print(dic1) #{1: [], 2: [], 3: []}
dic1[1].append('alex')
print(dic1) #{1: ['alex'], 2: ['alex'], 3: ['alex']}
2, 在循环一个字典时,如果删除某些键值对,可能会报错。如要删除字典dic = {"k1":"alex","k2":"ritian","k3":"wusir",k4:"taibai"},要删除当前字典中带k的键值对时,有以下方法,程序如下:
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
l1 = []
for i in dic:
if 'k' in i:
l1.append(i)
print(l1)
for k in l1:
del dic[k]
print(dic)
五:数据类型之间的转换
1,利用split可以把str类型转换为list类型,通过join也可以把list转化为str
2,dict转化为list类型时,方法如下:
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
print(list(dic.keys())) #['k1', 'k2', 'k3', 'name']
print(list(dic.values())) #['alex', '太白', '日天', 'wusir']
print(list(dic.items())) #[('k1', 'alex'), ('k2', '太白'), ('k3', '日天'), ('name', 'wusir')]
六:深浅copy
1,关于赋值运算,有如下程序:
l1 = [1,2,3,4]
l2 = l1
l1.append(5)
print(l1,l2)
最后打印的l1, l2结果相同,都是[1,2,3,4,5], 因为对于对于赋值运算,指向的都是同一个内存地址,因此当其中一个改变时,另一个也会随之改变。
2,浅copy
对于浅copy来说,第一层都是独立的内存地址,从第二层开始,都是指向同一个内存地址,一变都变。如下代码:
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)
print(l1,id(l1)) #[1, 2, 3, 666] 2845193877768
print(l2,id(l2)) #[1, 2, 3] 2845193877128 l1 = [1,[22,33,],2,3]
l2 = l1.copy()
l1[1].append(666)
print(l1,id(l1),id(l1[1])) #[1, [22, 33, 666], 2, 3] 2409427777160 2409427777800
print(l2,id(l2),id(l2[1])) #[1, [22, 33, 666], 2, 3] 2409456421384 2409427777800
3,深copy
对于深copy,无论多少层,在内存中都是两个独立的内存地址。如下代码:
import copy
l1 = [1,[22,33,],2,3]
l2 = copy.deepcopy(l1)
l1.append(777)
l1[1].append(666)
print(l1,id(l1),id(l1[1])) #[1, [22, 33, 666], 2, 3, 777] 2015999390280 2015999391624
print(l2,id(l2),id(l2[1])) #[1, [22, 33], 2, 3] 2015999506440 2015999506504
ps:若对一个列表从头到尾进行切片,则它是浅copy还是深copy呢?例如下的程序:
l1 = [1,[1,2],2,3]
l2 = l1[:]
l1[1].append(111)
print(l1,l2) #l1=l2=[1, [1, 2, 111], 2, 3]
最后,得到的结果是 l1=l2=[1,[1,2,111] ,2 ,3], 可见,该列表的内层发生改变时,则对其切片的列表也随之发生了改变,所以,l1和l2的内层都指向同一个内存地址,故这是一个浅copy。
基础数据类型的补充和深浅copy的更多相关文章
- python之路--基础数据类型的补充与深浅copy
一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*" ...
- 基础数据类型之集合和深浅copy,还有一些数据类型补充
集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
- python--基础数据类型的补充与深浅copy
一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*" ...
- 07、python的基础-->数据类型、集合、深浅copy
一.数据类型 1.列表 lis = [11, 22, 33, 44, 55] for i in range(len(lis)): print(i) # i = 0 i = 1 i = 2 del li ...
- 《Python》 基础数据类型补充和深浅copy
一.基础数据类型的补充 元组: 如果元组中只有一个数据,且没有逗号,则该‘元组’数据类型与里面的数据类型一致 列表: 列表之间可加不可减,可跟数字相乘 l1=['wang','rui'] l2=['c ...
- 基础数据类型汇总补充;集合set ;深浅copy
首先回顾: 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 ...
- 基础数据类型汇总补充,python集合与深浅拷贝
一.基础数据类型汇总补充 1.查看str所有方法方式 2.列表:在循环中删除元素,易出错或报错(飘红) lis = [11,22,33,44,55] # for i in range(len(lis) ...
- 百万年薪python之路 -- 基础数据类型的补充
基础数据类型的补充 str: 首字母大写 name = 'alexdasx' new_name = name.capitalize() print(new_name) 通过元素查找下标 从左到右 只查 ...
随机推荐
- [Spark内核] 第30课:Master的注册机制和状态管理解密
本課主題 Master 接收 Worker, Driver, Application Master 处理 Driver 狀态变换 Master 处理 Executor 狀态变换 [引言部份:你希望读者 ...
- newlisp
Windows で使う場合 Windoows用のインストーラからインストールすると.newLISP のIDE用のアイコンが出来るのでそこから使ってもいいし.コマンドプロンプトで newlisp と入力 ...
- ETL实践--kettle转到hive
ETL实践--kettle只做源数据的抽取,其他数据转换转到hive上. 1.用hive代替kettle的数据关联的原因 (1).公司之前的数据ELT大量使用了kettle.用kettle导原始数据速 ...
- C#设计模式之总结篇
一.引言 C#版本的23种设计模式已经写完了,现在也到了一个该总结的时候了.说起设计模式,我的话就比较多了.刚开始写代码的时候,有需求就写代码来解决需求,如果有新的需求,或者需求变了,我就想当 ...
- 【CentOS】阿里云ECS申请CA证书配置SSL
本文记录阿里云ECS申请CA证书流程先到阿里云控制台找到CA证书服务,这里两台ECS都已经申请签发了证书,如果是还没申请的就在"状态"中点击补全: 进去后填写完个人信息后,这里选择 ...
- main函数是主线程吗
1.线程的概念: 线程是程序最基本的运行单位,而进程不能运行,所以能运行的,是进程中的线程. 2.线程是如何创建起来的: 进程仅仅是一个容器,包含了线程运行中所需要的数据结构等信息.一个进程创建时,操 ...
- linux基础命令学习总结
本附录([美]哈恩:<Unix&Linux大学教程>附录B,张杰良译,清华大学出版社,2010年)摘要描述了书中所涉及的143个Unix使命,并且按照命令的类别进行排列.在每个名称 ...
- Mistakes in Hello World
今天在cmd中用Python写第一行代码"Hello World"出现错误. 写好的源码"HelloWorld.py"存放于" F:\learning ...
- 探讨 java中 接口和对象的关系
接口是对象么?接口可以有对象么?这个问题要跟类比对着,或许更好理解;类是对象的模版.接口不是类,所以:接口肯定不是对象的模版.那接口跟对象有什么样的关系?还是得从类入手;因为类实现了接口,所以可以说, ...
- sublime 设置新建文件自动添加author(作者)等文件头信息
很多时候, sublime 自带自动添加文件头信息, 但是并不是我们想要比如下面这样的:新建一个python文件 自动添加的author 信息== 上面并不是我想要的, 我想要下面这样的效果:== 这 ...