删除补充/集合/深浅拷贝

1.关于删除(重点)
  1.join可以把列表转化字符串
  join里面内容迭代
  2.for el in lst:
  lst.remove(el)
  # 内部有一个变量来记录当前被循环的位置
  # 直接删除是删不干净的,
  # 原因是每次删除都涉及到元素移动
  先把要删除的内容保存到一个新列表里面 循环这个新列表
  删除老列表
  tem = []
  for el in lst:
    tem.append(el)
  for el in tem:
    lst.remove(el)
  print(lst)
3.fromkeys
  是一个类方法 作用是创建新字典
  d = dict.fromkeys(["我哈哈", "test"], [])
  d["test"].append("张无忌")
  # 所用key用的同一个列表 改变一个 另外一个也跟着改变
  print(id(d["test"]), id(d["我哈哈"]))
  print(d)
  """
  1918219439752 1918219439752
  {'我哈哈': ['张无忌'], 'test': ['张无忌']}
  """


2.set集合
  这里面的元素是无序可/哈希的
  其实就是不存value的字典
  去重===>最大的应用

  1.增加
    s.add("") #添加
    s.update("xxx") #迭代更新
  2.pop() 随机弹出 返回删除结果
    s.remove("xxx") #指定内容
    s = set{}
    s = {1,2,3}
  3.修改
    先删除再添加
  4.查询 for el in s:
    print(el)
    #可迭代的查询

  5.其他操作
    1.交集
      s1&s2
    2.并集
    3.差集
    4.反交集
    5.子集
    6.超集
 面试题:在0-99里面生成10个随机数要求,不能重复

 1 import random
 2 
 3 # 取10个随机数 要求不能重复
 4 nums = set()
 5 count = 0
 6 
 7 while count < 10:
 8     nums.add(random.randint(0, 99))
 9     count = len(nums)
10 print(nums)
View Code

3.深浅拷贝(难点)
  1.赋值没有创建对象,多个变量共享同一个对象

1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若"]
2 lst2 = lst1
3 lst1.append("张无忌")
4 print(lst2, id(lst1), id(lst2))
5 """
6 ['赵敏', '蛛儿', '小昭', '周芷若', '张无忌'] 3028745675336 3028745675336
7 """
View Code


  2.浅拷贝:会创建新对象。新的对象里面的内容不会拷贝

  

 1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]]
 2 lst2 = lst1.copy()
 3 lst1[4].append("张无忌")
 4 print(lst1)
 5 print(lst2)
 6 print(id(lst1), id(lst2))
 7 print(id(lst1[4]),id(lst2[4]))
 8 
 9 """
10 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
12 2097090355848 2097119153864
13 2097090355784 2097090355784
14 """
View Code


  3.深拷贝:创建一个一模一样的完全的对象,这个对象衍生出来的

  

 1 import copy
 2 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]]
 3 lst2 = copy.deepcopy(lst1)
 4 lst1[4].append("张无忌")
 5 print(lst1)
 6 print(lst2)
 7 print(id(lst1), id(lst2))
 8 print(id(lst1[4]),id(lst2[4]))
 9 
10 """
11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
12 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王']]
13 2999280550344 2999280557704
14 2999280398856 2999280556680
15 """
View Code

 

  
  内容也会跟着赋值一份
  这个是面试内容,平时用得少

面试题

 

 1 # -*- coding: utf-8 -*-
 2 # @Time    : 2019/5/22 8:16
 3 # @Author  : Scavenger
 4 # @FileName: 49.py
 5 # @Software: PyCharm
 6 # @Github  : https://github.com/dgfwork/
 7 # @Blog    : https://www.cnblogs.com/gaofeng-d/
 8 import copy
 9 
10 # 直接赋值  浅拷贝 深拷贝 之间的区别
11 a = [1, 2, 3, [4, 5, [7, 8, 9]], 6]
12 
13 b = a
14 c = copy.copy(a)
15 d = copy.deepcopy(a)
16 b.append(10)
17 c[3].append(11)
18 # 直接赋值  指向同一个地址
19 # 浅拷贝  只新建一份外层  里面的列表 还是指向同一个内存地址
20 print(id(a), id(b), id(c), id(d))
21 print(id(a[3]), id(b[3]), id(c[3]), id(d[3]))
22 print(id(a[3][2]), id(b[3][2]), id(c[3][2]), id(d[3][2]))
23 
24 d[3].append(12)
25 print(a)
26 print(b)
27 print(c)
28 print(d)
View Code

转载于:https://www.cnblogs.com/gaofeng-d/p/10571688.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值