基本数据类型补充,深浅copy


#str

s='     '   #只能是以至少一个空格组成的字符串(全空格)
print(s.isspace())

#tuple

当元组只有一个元素组成,并没有",",则该元素是什么数据类型,整体就是什么数据类型

tu = (1)
tu1 = (1,)
print(tu,type(tu))
print(tu1,type(tu1))

#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)

在循环一个列表时,如果要是删除某些或者某类元素,容易出错

#fromkeys()

dic = dict.fromkeys('abc','alex')
print(dic)
dic1 = dict.fromkeys([1,2,3],[])
print(dic1)
dic1[1].append('alex')
print(dic1)

输出结果为:

字典

字典查询时用的是二分查找,速度快。

不可变的数据类型:可哈希    可变的数据类型:不可哈希

循环删除字典中含有k的键值对:

dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
l1 = []
for i in dic:
    if 'k' in i :
        l1.append(i)
for k in l1:
    del dic[k]
print(dic)

在循环一个字典时,如果删除某些键值对,可能会报错,需要利用列表来删除

数据类型之间的转化:

str-->list    split

list-->str    “”.join

tuple-->list   list(tuple)

list-->tuple   tuple(list)

dict专属类型:与list转换

dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
print(list(dic.keys()))
print(list(dic.values()))
print(list(dic.items()))

深浅copy

1,先看赋值运算。

l1 = [1,2,3,['barry','alex']]
l2 = l1

l1[0] = 111
print(l1)  # [111, 2, 3, ['barry', 'alex']]
print(l2)  # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'
print(l1)  # [111, 2, 3, ['wusir', 'alex']]
print(l2)  # [111, 2, 3, ['wusir', 'alex']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

2,浅拷贝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] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(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

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

3,深拷贝deepcopy。

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

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


			

                        优质内容筛选与推荐>>
1、angularjs(显示和隐身) 依赖注入
2、Linux常用命令学习
3、Ajax 长轮询
4、16.Github分支管理-创建与合并分支
5、响应式布局


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn