python学习第七天

1. 基础数据部分的补充
1. join: 把列表中的数据进行拼接。 拼接成字符串
2. 关于删除:
列表和字典在循环的时候都不能删除。
把要删除的内容保存在新列表中。 循环新列表。 删除老列表(字典)
3. fromkeys
dict.fromkeys(iter, value)
把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典
坑1: 返回新字典。不会改变原来的字典
dic = {}
dic.fromkeys(xxx, xxx)
print(dic) # {}
坑2:
d = fromkeys(xxx.[])
字典中的所有的value都是同一个列表

2. set集合
特点:无序不重复。 内部元素必须可哈希
1. add() 添加

3. 深浅拷贝(画图理解)
1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址
2. copy() [:] 浅拷贝。 拷贝第一层内容
3. 深拷贝
import copy
copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份
作用: 快速创建对象


# 字符串转化成列表: split()
# 列表转化成字符串:join()
# x->y类型 y(x)
# 表示False的数据类型: False, 0, "", [], tuple(), dict(), set(), None.

列表删除的坑:
lst = ["王大锤", "王有才", "张小白", "刘大哥"]
# 把要删除的内容记录在一个新列表中
new_lst = []
for el in lst:
new_lst.append(el)
# # 循环这个新列表. 删除原来的列表
for el in new_lst: # 不会导致循环的列表的元素移动问题
lst.remove(el) # 注意, 删除的是老列表
print(lst)


lst = ["王大锤", "王有才", "张小白", "刘大哥"]
# # 删除掉姓王的
new_lst = [] # 装要删除的内容
for el in lst:
if el.startswith("王"): # 判断字符串是否以xxx开头
new_lst.append(el)
# # 执行删除
for el in new_lst:
lst.remove(el)
print(lst)

# # 坑1
dic = {}
# # fromkeys是创建新字典。 不是在原有的基础上给你增加键值对
d = dic.fromkeys("周杰伦", "王尼玛") # fromkeys是一个staticmethod 静态方法.
dd = dict()
ddd = {}
print(d)

# # 坑2
# # 你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变
d = dict.fromkeys("周杰伦",["哇哈哈"])
print(d)
d["周"].append("爽歪歪")
print(d)
#
print(id(d["周"]), id(d["杰"]), id(d["伦"]))


set 集合: s = {1,2,3,4,}
# 字典:{}
# 字典的key: 不可变,不能重复, 底层存储是无序的
# 集合里的元素: 不可变,不能重复. 底层也是无序的。 hash
# 集合其实就是字典. 集合里面不存value , 集合中只存储key

# # 应用(重点) 去重复
# lst = ["周杰伦", "周杰伦", "王力宏", "王力宏", "胡辣汤"]
# s = set(lst) # 集合
# print(s)
# # 转化成列表
# print(list(s))

# s = {1,2,} # 本身是可变的 不可哈希。 但是内部的元素是不可变的
# s.add()
# print(s)

# list -> tuple
# set -> frozenset

# frozenset 可哈希的集合, 不可变.
# s = frozenset([1,2,3,4,5])
# print(s)
# for el in s:
# print(el)

深浅拷贝
1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址

2. copy() [:] 浅拷贝。 拷贝第一层内容

# 浅拷贝的问题
# 优点: 省内存.
# 缺点: 容易出现同一个对象被多个变量所引用
# lst1 = ["孙悟空", "贝吉塔", "卡卡罗特",["七龙珠","战斗陀螺"]]
# lst2 = lst1.copy() # 浅拷贝
#
# # lst1.append("短笛")
# lst1[3].append("巴啦啦小魔仙")
# print(lst1)
# print(lst2)
#
# print(id(lst1), id(lst2))


3. 深拷贝
import copy
copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份
作用: 快速创建对象
# 有点: 完全拷贝出一份两个对象之间除了数据相同。 没有任何关系
# 缺点: 占内存
# import copy # 引入拷贝模块
# lst1 = ["孙悟空", "贝吉塔", "卡卡罗特",["七龙珠","战斗陀螺"]]
# lst2 = copy.deepcopy(lst1) # 会把这个对象相关的内部信息全部复制一份
#
# lst1[3].append("巴啦啦小魔仙")
# print(lst1)
# print(lst2)
#
# print(id(lst1), id(lst2))

原文地址:https://www.cnblogs.com/EuanXu/p/9853242.html