pythonベースの学習day6

コードブロック、キャッシュ機構、コピーの深さ、のセット

  • ID、である、==
  1. ID:同じIDのデータと比較した場合、ID番号は、一意に類推することができます。
#获取数据的内存地址(随机的地址:内存临时加载,存储数据,当程序运行结束后,内存地址即被丢弃):
i = 'a'
print(id(i))
>>>2047746570672  
print(id(i))
>>>2020558633392
print(id(i))
print(id(i))
>>>1908036008368
1908036008368

l1 = [1,2,3]
l2 = [1,2,3]
print(l1 == l2)
>>>True    #比较的是两边的值是否相等。
  1. 判定されたIDが同じである(「」==「」判断同じ値かどうか
l1 = [1,2,3]
l2 = [1,2,3]
print(l1 is l2)
>>>False   #判断的是内存地址是否相同。

print(id(l1))
print(id(l2))
>>>2648963830216
2648963830728

l1 = [1,2,3]
l2 = l1
print(l1 is l2)
print(id(l1))
print(id(l2))
>>>True
2053863395784
2053863395784


s1 = 'iam'
s2 = 'iam'
print(s1 is s2)
>>>True

print(id(s1))
print(id(s2))
>>>2188534085552
2188534085552

同じID、必ずしも同一の値、同一の値、ID必ずしも同じではありません。

  • ブロック:pythonのプログラム・コード・ブロックが構築されます。ブロックを単位として実行されるPythonスクリプトプログラム、です。モジュール、関数、クラス、ファイルには、すべてのコードブロックです。コマンド入力、対話モード、各コマンドは、コードブロックです。二つのメカニズムキャッシュブロックを変更するために同じメカニズムを使用してコードの同じブロックであれば。コードブロックが異なる場合、機構は、小さなデータ・プールが使用されて存在します

    • :コードのブロックとメカニズムをキャッシュメカニズム含量: Pythonはオブジェクトの同一のブロックを初期化するコマンドを実行するとき、値が既に存在するかどうかをチェックする、存在する場合、それが再利用されます。言い換えれば、あなたが同じブロックを実行すると、オブジェクトを初期化するコマンドに遭遇し、彼はこの変数の値で初期化されます辞書に新しい変数ます最初のクエリレコードの顔には、辞書に格納され、同じid:あなたが同じレコードを持っている場合、それはある辞書に先立って、この値を、再使用されます。

      適当INT(フロート) ::コードの同じブロック内の任意の数の多重化されています。

      STR:ほとんどすべての文字列の機構(1キャッシュ応じるであろう、文字列が取得されていない機構をキャッシュ満たす乗算,, 2例を乗じたコードブロックの列:1乗算因子は、任意の文字列1でありますミートコードブロックに機構をキャッシュ、2乗数> = 2)キャッシュ機構コードブロックを満足のみ大文字と小文字、数字、下線、<= 20の全長を含んでい

      s1 = 'iam'*1
      s2 = 'iam'*1
      print(s1 is s2)
      >>>True

      BOOL:TrueとFalse 1,0の方法は、辞書、および再利用に存在しています。

      利点は:時間と空間内の数字の文字列、整数、文字の処理性能を向上させる能力は、頻繁に創造と破壊を避けるために、同じ値の文字列、整数、「辞書」から直接取得する場合に多重化されている必要があり、効率を改善しますメモリ保存。

    • 異なるコード・ブロック・キャッシュ・メカニズムで:小さなデータ・プール、また機構をキャッシュ小さな整数として知られている、などが休止機構と呼ばれます。パイソン自動的に256にしてから-5整数キャッシュされ、これらの整数を変数に代入し、オブジェクトが、すでに作成されたキャッシュオブジェクトの使用を再作成していないだろうとき。

      Pythonの文字列は、一定のルールになります存在がプール文字列あなた変数に割り当てられたこれらの文字列、および再作成されることはありませんオブジェクトが、プール内の文字列が存在する中で使用が作成されたときに、コピーを作成し、これは、オブジェクト。

        、実際には、両方のキャッシュまたはプールが存在する文字列は、Pythonの最適化で作られた文字列の整数であり、そして「プール」(コンテナ、または辞書)に入れ〜5から256の一定のルール、これらの範囲内の文字列または整数へのポイントは、その後、彼は「プール」で直接引用されたことをプログラム変数かどうか、含意はのメモリを作成することです。

      適しint型(float型):整数のために、小さなデータプールの範囲であることを-5 256に、複数の変数が同じ(この範囲内で)番号を指している場合は、すべて知っている私たちは、彼らがメモリ内にありますポイントは、メモリ・アドレスです。

      # pycharm 通过运行文件的方式执行下列代码:  这是在同一个文件下也就是同一代码块下,采用同一代码块下的缓存机制。
      i1 = 1000
      i2 = 1000
      print(i1 is i2)  # 结果为True 因为代码块下的缓存机制适用于所有数字
      >>>True
      
      
      #通过交互方式中执行下面代码,这是不同代码块下,则采用小数据池的驻留机制。
      >>> i1 = 1000
      >>> i2 = 1000
      >>> print(i1 is i2)
      False  # 不同代码块下的小数据池驻留机制 数字的范围只是-5~256.

      STR:0または1の文字列の長さ、デフォルト機構が採用されている居住者(プール小さなデータ)。2.文字列> 1の長さに、そして唯一の小文字、数字、下線が含まれ、デフォルトでは存在します。二つの条件の下で得られた3乗算列:乗数は1であり、文字列を満たすルール、デフォルトの存在。2.乗数> = 2:大文字、小文字、数字、下線、<= 20、デフォルト存在の全体の長さのみが含まれています。

      #4.指定驻留
      from sys import intern
      a = intern('hello!@'*20)
      b = intern('hello!@'*20)
      print(a is b)
      >>>True
      #指定驻留是你可以指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字

      ブール値はTrue、Falseを、あなたがTrueにポイントを作成するどのように多くの変数に関係なく、Falseのは、1つだけ彼の記憶ではあります。

      # 虽然在同一个文件中,但是函数本身就是代码块,所以这是在两个不同的代码块下,不满足小数据池(驻存机制),则指向两个不同的地址。
      def func():
          i1 = 1000
          print(id(i1))  # 2288555806672
      
      def func2():
          i1 = 1000
          print(id(i1))  # 2288557317392
      
      func()
      func2()

      長所:時間と空間でパフォーマンスの数値を処理する整数、いくつかの文字列を調達する能力、頻繁に作成および破棄、効率を向上させる避けるために使用されている「プール」から直接持ち込ま同じ文字列を評価する必要性、整数、、、メモリ保存

参考記事:HTTPS://www.cnblogs.com/jin-xin/articles/9439483.html

  • コレクション(集合):データ型コンテナ、データ要素が不変(ハッシュ可能)であることを必要とするが、それ自体可変データ・タイプである(ハッシュ化されていません)。セットは順不同です。{}内のデータを記憶します。

    • 役割:再リストに、テストの関係(交差点、労働組合、...)

      。/ 1コレクションを作成します:

      set = {1,2,'a'}
      #空集合的表示:
      set1 = set()   #set1 = {}表示空字典

      / 2によって:.追加、更新()#反復増加、が繰り返され、重複除外

      set1 = {1,2}
      set1.add('a')
      print(set1)
      >>>{'a', 1, 2}  #集合无序
      
      set1.update('asdfdsa')
      print(set1)
      >>>{'a', 1, 2, 'f', 's', 'd'}

      / 3削除:.削除()(、要素を記載削除ポップ()ランダム削除、クリア()空のコレクションセットを削除デル

      set1 = {'a', 1, 2, 'f', 's', 'd'}
      set1.remove('a')
      print(set1)
      >>>{1, 2, 's', 'f', 'd'}
      
      set1.pop()
      print(set1)
      >>>{2, 's', 'f', 'd'}
      
      set1.clear()
      print(set1)
      >>>{}
      
      del set1
      

      。/ 4に変更:削除し、その後増加

    • ペイ、及び、

      / 1交差点。(&または交差点)いくつかの共通要素のコレクション

      set1 = {1,2,3}
      set2 = {2,3,4}
      print(set1 & set2) #or print(set1.intersection)
      >>>{2,3}

      / 2.連合。(|またはUNION)すべての要素のセット

      set1 = {1,2}
      set2 = {2,3}
      print(set1 | set2) #or print(set1.union(set2))
      >>>{1,2,3}

      / 3差集合( - もしくは差)、ユニークな要素の前のセット

      set1 = {1,2,3,4,5}
      set2 = {2,4,6}
      print(set1 - set2) #or print(set1.difference(set2))
      >>>{1,3,5}

      / 4.アンチ交差点。要素の各セットに対して一意(symmetric_differenceまたは^)

      set1 = {1,2,3,4,5}
      set2 = {3,4,5,6,7}
      print(set1 ^ set2) #or print(set1.symmetric_difference(set2))
      >>>{1,2,6,7}

      スーパーセットの/ 5.サブセット

      set1 = {1,2}
      set2 = {1,2,3}
      print(set1 < set2)
      >>>True
      print(set1.issubset(set2))    #set1是set2的子集
      >>>True
      
      print(set2 > set1)
      >>>True
      print(set2.issuperset(set1)) #set2是set1的超集
      >>>True

      / 6のfrozenset()コレクションが不変タイプとなることができ

      s = frozenset('qweasd')
      print(s,type(s))
      >>>frozenset({'q', 'e', 'w', 's', 'a', 'd'}) <class 'frozenset'>
  • コピー深さ

    • シャローコピー、
    ```python
    l1 = [1,2]
    l2 = l1
    l1.append(3)
    print(l2)
    >>>[1,2,3] #l1,l2两变量指向同一个id(数据)
    
    
    #浅copy
    l3 = [1,2,['a']]
    l4 = l3.copy()
    l3.append(3)   
    print(l3)
    >>>[1,2,['a'],3]
    print(l4)
    >>>[1,2,['a']]
    
    
    l3[-2].append(4)    #or l4[-1].append(4)
    print(l3)
    >>>[1, 2, ['a', 4], 3]
    print(l4)  
    >>>[1,2,['a',4]] #l4与l3列表中的数据id是相同的,但l4与l3列表id不相同,即l3中的每个元素与l4中的每个元素使用的是相同的一个id,但l4与l3用的不是同一个id。
    ```
    
    其实列表第一个一个的槽位,它储存的是对象的内存地址。浅拷贝**仍然使用原来的对象的内存地址**。对储存的可变对象可以进行更改;若改变不可变类型,则改变的不是不可变类型本身,而是变量的指向关系
  • ディープコピー、インポートモジュールへのコピーが必要

    import copy
    l3 = [1,2,['a']]
    l4 = copy.deepcopy(l3)
    l3[-1].append(3)
    print(l3)
    >>>[1,2,['a',3]]
    print(l4)
    >>>[1,2,['a']]
    #列表第一个一个的槽位,它储存的是对象的内存地址。深拷贝会创建一个新的对象的内存地址。

    Pythonは深いコピーの最適化を行って、オブジェクト不変のデータ・タイプは、唯一の変数データ・メモリ・アドレスの再作成タイプに、同じメモリアドレスに従ってください。

    シャローコピー:(リスト、辞書)、ネストされた変数のデータ型は同じです。

    ディープコピー:(リスト、辞書)、ネストされた変数のデータ型は同じではありません。

l1 = [1,2,['a']]
l2 = l1[:]
l1[-1].append(3)
print(l2)
>>>[1,2,['a',3]]  #切片是浅copy

おすすめ

転載: www.cnblogs.com/wby-110/p/12507988.html