深浅拷贝 set集合

数据类型的补充

 编码转换python

    # s1 = '中国'
    # b1 = s1.encode('utf-8')
    # # print(b1)-------------->b'\xe4\xb8\xad\xe5\x9b\xbd'
 utf-8 bytes --->gbk bytes
    # s2 = b1.decode('utf-8')
    # # print(s2)---------------中国
    # b2 = s2.encode('gbk')
    # print(b2)------------------b'\xd6\xd0\xb9\xfa'app

 

    

 数据类型的补充
 元组编码

    tu1 = ('laonanhai')
    tu2 = ('laonanhai',)
    print(tu1,type(tu1))-----------laonanhai <class 'str'>
    print(tu2,type(tu2))-----------('laonanhai',) <class 'tuple'>spa

    tu1 = (1)
    tu2 = (1,)
    print(tu1,type(tu1))-------------1 <class 'int'>
    print(tu2,type(tu2))(1,) -----------<class 'tuple'>code

 元组里面若是只有一个元素且没有逗号,则该数据的数据类型与里面的元素相同
    tu1 = ([1, 2, 3])
    tu2 = ([1, 2, 3])
    print(tu1, type(tu1))----------[1, 2, 3] <class 'list'>
    print(tu2, type(tu2))----------[1, 2, 3] <class 'list'>对象

 

 list

    l1 = [111, 222, 333, 444, 555,]索引

    索引为奇数对应的全部元素所有删除
    del l1[1::2]
    print(l1)--------------[111, 333, 555] utf-8

***在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果
倒着删除rem

for index in range(len(l1)-1,-1,-1):hash

    if index % 2 == 1:

        del l1[index]

print(l1)--------------------[111, 333, 555]

 

dict

dic = dict.fromkeys('abc',666)

print(dic)-----------------{'a': 666, 'b': 666, 'c': 666}

dic = dict.fromkeys([11, 22, 33],666)

print(dic)--------------------{11: 666, 22: 666, 33: 666}

dic = dict.fromkeys([1, 2, 3], [])

dic[3].append(666)

print(dic)----------------------{1: [666], 2: [666], 3: [666]}

 


***在循环dict中,最好不要改变dict的大小,会影响结果或者报错。

dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3','name': 'alex'}for i in dic:

if 'k' in i:

    del dic[i]

l1 = []

for key in dic:

    if 'k' in key:

        l1.append(key)

print(l1)

for key in l1:

    del dic[key]

print(dic)---------------------报错(缘由是字典在迭代过程当中改变大小)

 


数据类型的转换
str----------->list    split
list--------->str       join
tuple-------->list
tu1 = (1, 2, 3)
l1 = list(tu1)
print(l1)------------------[1, 2, 3]
tu2 = tuple(l1)
print(tu2)----------------(1, 2, 3)

dic----------->list     list(dic)(列表中的元素只有key)

dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',}
l1 = list(dic)
print(l1)------------------------['k1', 'k2', 'k3']
print(list(dic.keys()))------------['k1', 'k2', 'k3']
print(list(dic.values()))------------['v1', 'v2', 'v3']
print(list(dic.items()))---------------[('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]

0, '', [], () {}  ---> bool 都是Fasle
print(bool([0, 0, 0]))------------True

集合
    集合自己是可变的数据类型,不可hash,有增删改查操做
    set集合是python中的一个基本数据类型
    set中的元素是不重复的,无序的,里面的元素必须是可hash的(int,str,tuple,bool)
    set就是dict类型的数据可是不保存value

set集合的增删改查

1增长

.add()

s = {"刘嘉玲", '关之琳', "王祖贤"}

s.add("郑裕玲")

print(s)

s.add("郑裕玲")    # 重复的内容不会被添加到set集合中

print(s)

s = {"刘嘉玲", '关之琳', "王祖贤"}

s.update("麻花藤")    # 迭代更新

print(s)

2.删除

s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"}

item = s.pop()  # 随机弹出⼀一个.

s.remove("关之琳") # 直接删除元素

# s.remove("⻢马⻁虎疼") # 不存在这个元素. 删除会报错

s.clear()    # 清空set集合.须要注意的是set集合若是是空的. 打印出来是set() 由于要和 dict区分的.

3.修改

 set集合中的数据没有索引. 也没有办法去定位一个元素. 因此没有办法进行直接修改.

# 咱们能够采用先删除后添加的方式来完成修改操做

s.remove("刘嘉玲")

s.add("赵本山")

4.查询

# set是⼀一个可迭代对象. 因此能够进行for循环

for el in s:   

print(el)

 

set集合自己是能够发生改变的. 是不可hash的. 咱们能够使用frozenset来保存数据.

frozenset是不可变的. 也就是⼀个可哈希的数据类型

 

深浅拷贝

浅拷贝. 只会拷贝第⼀层. 第二层的内容不会拷贝. 因此被称为浅拷贝

lst1 = ["何炅", "杜海海涛","周渝⺠民", ["麻花藤", "⻢马芸", "周笔畅"]]

lst2 = lst1.copy()

 深度拷贝. 把元素内部的元素彻底进行拷贝复制. 不会产生⼀个改变另⼀个跟着 改变的问题
import copy
lst1 = ["何炅", "杜海海涛","周渝⺠民", ["麻花藤", "⻢马芸", "周笔畅"]]

lst2 = copy.deepcopy(lst1)

相关文章
相关标签/搜索