day009の研究ノート

常駐メカニズム

プログラムの開発の可能性が関与することは働いていません

  • 存在意義:メモリを節約し、効率を改善します

==:両側で等しい同じ内容かどうかを決定します

である:メモリアドレスが両側で同じ値か否かを判断します

機構は、注文を常駐:ブロック----->(コードブロックとコードブロックとの間のように理解される)小さなデータ・プール

  • コードブロックは、機構(PyCharm試験)常駐します

    定義:ファイルの各行、関数、モジュール、クラス、対話モード(端末)PY

    同じメモリアドレスに続いて

    • デジタル:-5 +無限大に(実際には-5 256個のメモリアドレスへのすべての場所で同じです)

      a = 256
      b = 256
      print(a is b) #True
      print(id(a),id(b)) #1516347472 1516347472  相同(固定地址)
      a = 257
      b = 257
      print(a is b) #True
      print(id(a),id(b)) #3075275480848 3075275480848  相同(可变地址)
      a = -6
      b = -6
      print(a is b) #False
      print(id(a),id(b)) #2228967021296 2228967021200 不相同(可变地址)
      • 同じ定義の内容は、それが同じメモリアドレスがある場合には

        a = "123中文english%*-"
        b = "123中文english%*-"
        print(a is b) #True
        print(id(a),id(b)) #2064241611472 2064241611472 相同(可变地址)
      • (中国語や特殊記号を使用することはできません - 0/1を掛けた場合を除き - 自体が空の文字列に理解されている)を乗算場合、全長は20を超えることはできません

        a = "123中文english%*-" * 1
        b = "123中文english%*-" * 1
        print(a is b) #True
        print(id(a),id(b)) #2518570390224 2518570390224 相同(可变地址)
        a = "12中eng%*-" * 2 #有中文及特殊符号
        b = "12中eng%*-" * 2
        print(a is b)  #False
        print(id(a),id(b)) #2180300624592 2180300625376 不相同(可变地址)
        a = "123englis" * 2
        b = "123englis" * 2
        print(a is b) #True
        print(id(a),id(b)) #2420451431240 2420451431240 相同(可变地址)
        a = "123englis66666" * 2 #总长度超限
        b = "123englis66666" * 2
        print(a is b)   #False
        print(id(a),id(b)) #1923061610656 1923061830800 不相同(可变地址)
  • 小さなプールデータは、機構(テスト端子)に常駐します

    プール機構のブロックとの間に存在するコードの小さなデータブロックの実装

    同じメモリアドレスに続いて

    • デジタル:-5 256にメモリアドレスが(どこでも同じ)固定されています

      >>> a = 1
      >>> b = 1
      >>> print(a is b)
      True
      >>> print(id(a),id(b))
      1531740272 1531740272 #相同(固定地址)
      
      >>> a = 257
      >>> b = 257
      >>> print(a is b)
      False
      >>> print(id(a),id(b))
      2544622726000 2544622468944 #不相同(可变地址)
      
      • 純粋メモリアドレスながら同じ数字や文字を定義する場合

        >>> a = "123aa"
        >>> b = "123aa"
        >>> print(a is b)
        True
        >>> print(id(a),id(b))
        2544623459496 2544623459496 #相同(可变地址)
        
      • Python36乗算(中国語と特殊ないシンボル - 乗算0時以外 - 空の文字列として理解される)場合、全長は20を超えることはできません

        >>> a = "www+1" * 0
        >>> b = "www+1" * 0
        >>> print(a,b)
        
        >>> print(a is b)
        True
        >>> print(id(a),id(b))
        1714965740208 1714965740208 #相同(可变地址)
        
      • Python37乗算(中国語と特殊ないシンボル - 乗算0時以外 - 空の文字列として理解される)場合、全長は4096を超えることができません

コピー深さ

  • 効果

    • コードを開発する際に後期の問題を回避するには、理由を知りません
    • インタビュー(譲渡?シャローコピー?ディープコピー?)
  • 割り当て

    より多くの変数名が同じメモリアドレスを指します

    • 不変のデータ・タイプ:新しいオープンスペース

      a = 10 
      b = a # a,b 都指向10的内存地址
      a = 11 #对a赋值不影响b
      print(a,b)
      print(id(a),id(b)) #不同
      
    • 変数データタイプ:その場で修正

      lst =[1,2,3] #可变数据类型
      lst1 = lst #lst,lst1 都指向列表的内存地址
      print(lst,lst1) #[1, 2, 3] [1, 2, 3]
      lst.append(4)
      lst = [1,2,3,4]
      print(lst,lst1) #[1, 2, 3, 4] [1, 2, 3, 4]
      print(id(lst),id(lst1)) #不同
      
      dic = {"key":11,"key2":[1,2,3]}
      dic1 = dic #dic,dic1都指向字典的内存地址,理解为新的引用
      dic["key2"].append(5) #两字典同步修改
      del dic["key"] #两字典同步修改
      print(dic,dic1) #{'key2': [1, 2, 3, 5]} {'key2': [1, 2, 3, 5]}
      print(id(dic),id(dic1)) #地址相同,可变,但不是同一数据?
      
  • シャローコピー

    それが値を見つけることであるメモリ・アドレスから分かるように、第1層の専用メモリアドレスをコピーし、可変および非可変データは、共有され、次いで(一見機構コードブロックを常駐する要素値が続く)表示

    • コピー()

      lst = [1,2,3]
      lst1 = lst.copy()  #复制,新的列表
      print(lst,lst1) #[1, 2, 3] [1, 2, 3]
      lst1.append(4) #lst1追加,不影响lst
      print(lst,lst1) #[1, 2, 3] [1, 2, 3, 4]
      print(id(lst),id(lst1)) #不同,可变
      print(id(lst[0]),id(lst1[0]),id(1)) #1530757232 相同 固定
      
    • 薄切

      lst = [1,2,[3,4]]
      lst1 = lst[:] #只拷贝第一层
      print(id(lst),id(lst1)) #不同
      print(id(lst[-1]),id(lst1[-1])) #两列表中的列表元素地址相同
      lst1[-1].append(5)
      print(lst,lst1) #[1, 2, [3, 4, 5]] 相同(对相同地址的操作)
      print(id(lst[-1]),id(lst1[-1])) #地址不变
      
  • ディープコピー

    メモリアドレスの共有不変データ要素;

    変数のデータ型に関係なく、この原則(お互いに理解が影響しません)ネストされているどのように多くの層、新しいスペースを開けません

    import copy  #导入copy模块
    lst = [-111,-111,[3,4]]
    lst1 = copy.deepcopy(lst)  #深拷贝
    print(id(lst),id(lst1)) #外壳不一样
    print(id(lst[0]),id(lst1[0]))   #不可变数据  --共用
    print(id(lst[1]),id(lst1[1]))   #不可变数据  --共用,开始定义过是不同地址,复制出来的是用相同地址
    print(id(lst[-1]),id(lst1[-1]))  #可变数据--新开辟空间
    print(id(lst[-1][-1]),id(lst1[-1][-1]))  #里面的不可变数据  --共用
    

セット

  • 定義

    • Pythonのデータ型、ランダム、変数、反復すること
    • キーワードのセット
    • -emptyセット()S = {1,2,3,4}
    • セットの要素のみ(なし辞書値として理解される)(ハッシュ可能)、不変です
  • 効果

    • 重複排除

      lst = [1,2,1]
      print(list(set(lst))) #[1, 2]
      
    • コンテナ:データを保存します

  • オペレーティング

    • 増加

      s = set()
      s.update("alex") #迭代添加
      s.add("alex") #直接添加
      print(s)
      
    • 削除

      s = {"0","1","2","3"}
      s.pop() #随机删除 pop具有返回值
      s.remove("0")  #指定元素删除
      s.clear() #清空 后的显示set()
      print(s)
      
    • 変更

      • 最初のカットの後にプラス
      • 変換データ型に変更
    • 検索

      • forループ
      • ダイレクトプリント
  • セットの関係

    • 連合|
    • 交差点&
    • 補完^
    • 違いは、設定します -
    • スーパーセット(スーパーセット)>分析
    • サブセット<分析
    python = {"海绵","一帆","心累","大圣"}
    linux = {"海绵","大圣","哈哈哈","嘿嘿嘿"}
    print(python | linux)  #并集 {'嘿嘿嘿', '大圣', '哈哈哈', '海绵', '一帆', '心累'}
    print(python & linux)  #交集 {'海绵', '大圣'}
    print(python ^ linux)  #补集 {'嘿嘿嘿', '哈哈哈', '一帆', '心累'}
    print(python - linux)  #差集 {'一帆', '心累'}
    print(linux - python )  #差集 {'嘿嘿嘿', '哈哈哈'}
    
    python = {"海绵","一帆","心累","大圣"}
    linux = {"海绵","大圣"}
    print(python > linux) #判断python是不是linux的超集 True
    print(python < linux) #判断python是不是linux的子集 False
    

おすすめ

転載: www.cnblogs.com/mayangin/p/11525382.html