zoukankan      html  css  js  c++  java
  • python之深浅拷贝

    1. 基础数据类型补充

    需要把字符串转化为列表:split()
    把列表转化成字符串: join()
    #join() 使用前面的字符串,对后面的列表进行拼接,拼接的结果是一个字符串
    lst = ['yesterday', 'today', 'tomorrow']
    s = '_'.join(lst) #字符串
    print(s) # yesterday_today_tomorrow
    #split()根据给的参数进行切割,结果是一个列表
    s1 = 'yesterday_today_tomorrow'
    lst = s1.split('_')  #列表
    print(lst) # ['yesterday', 'today', 'tomorrow']

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

    #删除带球的运动
    li = ['篮球', '网球','兵乓球', '电子竞技', '台球']
    new_lst = []
    for item in li:
        if '' in item:
            new_lst.append(item) #将需要删除的元素放入新列表
    print(new_lst) #显示需要删除的内容, ['篮球', '网球', '兵乓球', '台球']
    for el in new_lst: #遍历新列表, 删除老列表中的内容
        li.remove(el)
    print(li) # 最后输出没有包含球类的运动 ['电子竞技']

       fromkeys():Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。语法: dict.fromkeys(seq[, value])

      注意: 在面试过程中,在这里有2个坑:

    #坑1:返回一个新字典,和原来的关系没有关系
    dic = {}
    dict.fromkeys("天气", "很好") # 会返回一个新的字典{'天': '很好', '气': '很好'}
    print(dic) # {}
    
    #坑2:如果value是可变的
    d = dict.fromkeys('天气', [])
    print(d) # {'天': [], '气': []}
    d[''].append('很好')
    print(d) # {'天': ['很好'], '气': ['很好']}

    2.深浅拷贝:

    (1) = 没有创建新对象, 只是把内存地址进行了复制

    # 从上到下只有一个列表被创建
    lst1 = ["yesterday", "today", "tomorrow"]
    lst2 = lst1  # 并没有产生新对象. 只是一个指向(内存地址)的赋值
    print(id(lst1)) # 32035016
    print(id(lst2)) # 32035016
    
    lst1.append("July")
    print(lst1) # ['yesterday', 'today', 'tomorrow', 'July']
    print(lst2) # ['yesterday', 'today', 'tomorrow', 'July']

    (2.) 浅拷贝

    lst1 = ["yesterday", "today", "tomorrow"]
    lst2 = lst1.copy()  # 拷贝, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝,只拷贝第一层内容
    print(id(lst1)) # 35508424
    print(id(lst2)) # 35433736
    lst1.append("July")
    print(lst1) # ['yesterday', 'today', 'tomorrow', 'July']
    print(lst2) # ['yesterday', 'today', 'tomorrow']

    (3)深拷贝

    lst1 =  ["yesterday", "today", "tomorrow",['year', 'month','day']]
    lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式
    
    print(id(lst1)) # 36298952
    print(id(lst2)) # 36063624
    
    print(lst1) # ['yesterday', 'today', 'tomorrow', ['year', 'month', 'day']]
    print(lst2) # ['yesterday', 'today', 'tomorrow', ['year', 'month', 'day']]
    
    lst1[3].append("July")
    print(lst1) # ['yesterday', 'today', 'tomorrow', ['year', 'month', 'day', 'July']]
    print(lst2) # ['yesterday', 'today', 'tomorrow', ['year', 'month', 'day']]

  • 相关阅读:
    n个数字相加
    爬取编程常用词汇,保存为Excel
    Python对 Excel 的常用操作
    Python对Redis增删改查
    Python对MySql增删改查
    Python对MongoDB增删改查
    MySql事务的简单使用
    Python-判断回文
    Pyhton 连接数据库
    PyCharm设置完自动上传,却不会自动上传任何内容
  • 原文地址:https://www.cnblogs.com/q455674496/p/10063959.html
Copyright © 2011-2022 走看看