基本数据类型补充 深浅拷贝

1. 基础数据类型补充
大多数的基本数据类型的知识.已经学完了
join()
 "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串

# lst = ["alex", "dsb", "wusir", "xsb"]
# 使用前面的字符串. 对后面的列表进行拼接,拼接的结果是一个字符串
# s = "_".join(lst)
# print(s)

 


split() 切割. 切割的结果是列表

# split() 根据你给的参数进行切割, 切割的结果是列表

# s = "alex_dsb_wusir_xsb"
# lst = s.split("_")  # 列表
# print(lst)

 

列表和字典: 都不能在循环的时候直接删除
把要删除的内容记录在新列表中然后循环这个新列表. 删除列表(字典)

 

需要把字符串转化成列表: split()
# 把列表转化成字符串: join()

 

 

列表删除:

 lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"]
# 1. 把要删除的内容写在新列表中.# 2. 循环这个新列表. 删除老列表# 需求: 删除列表中代球字的运动项目new_lst = []for el in lst:    if "球" in el:        new_lst.append(el) # 记录要删除的内容# 要删除的列表print(new_lst)# 循环新列表. 删除老列表for el in new_lst: # ['篮球', '排球', '足球', '台球']    lst.remove(el)print(lst)

字典删除:

字典在被循环的时候是不能删除的.
dic = {"张无忌":"乾坤大挪移", "周芷若":"", "赵敏":"卖萌"}

# # for k in dic:
# #     # dic.pop(k)  # dictionary changed size during iteration
# #     dic["灭绝师太"] = "倚天屠龙剑" # dictionary changed size during iteration
#
# # 把要删除的key保存在一个新列表中
# # 循环这个类表.删除字典中的key:value
# lst = []
# for k in dic:
#     lst.append(k)
#
# # 循环列表
# # 删除字典中的内容
# for el in lst:
#     dic.pop(el)
# print(dic)

 

fromkeys()
坑1: 返回新字典. 不会更改老字典
坑2: 当value是可变的数据类型. 各个key共享同一个可变的数据类型. 其中一个被改变了. 其他都跟着变

# 坑: 大坑, 神坑
# fromkeys() 帮我们创建字典用的
# 把第一个参数进行迭代. 拿到每一项作为key和后面的value组合成字典
# d = dict.fromkeys("张无忌", "赵敏") # 创建字典
# print(d)








# 坑1: 返回新字典. 和原来的字典没有关系
# dic = {}
# d = dic.fromkeys("风扇哥", "很困")
# print(dic) # {}
# print(d)


# 坑2: 如果value是可变的数据类型,
# 那么其中一个key对应的value执行的更改操作. 其他的也跟着变
# d = dict.fromkeys("胡辣汤", [])
# print(d) # {'胡': [], '辣': [], '汤': []}
# print(id(d['胡']))
# print(id(d['辣']))
# print(id(d['汤']))

# d['胡'].append("河南特色")
# print(d)  # {'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']}

 

# 程序员找工作和菜市场大妈买白菜是一样的


2. 深浅拷贝(重点, 难点)
  1. = 没有创建新对象, 只是把内存地址进行了复制
  2. 浅拷贝 lst.copy() 只拷贝第一层.
  3. 深拷贝
  import copy
  copy.deepcopy() 会把对象内部的所有内容进行拷贝

# lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"]
# lst2 = lst1.copy()  # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝
#
# print(id(lst1))
# print(id(lst2))
#
# lst1.append("葫芦娃")
# print(lst1)
# print(lst2)

 

# lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
# lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容
#
# print(id(lst1))
# print(id(lst2))
#
# print(lst1)
# print(lst2)
#
# lst1[4].append("葫芦娃")
# print(lst1)
# print(lst2)
import copy

lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式

print(id(lst1))
print(id(lst2))

print(lst1)
print(lst2)

lst1[4].append("葫芦娃")
print(lst1)
print(lst2)

 

为什么要有深浅拷贝?
提高创建对象的速度
计算机中最慢的. 就是创建对象. 需要分配内存.
最快的方式就是二进制流的形式进行复制. 速度最快.

posted @ 2018-12-04 21:58  _花木兰  阅读(218)  评论(0编辑  收藏  举报