Недостаточно прав для изменения ярлыков Gmail с помощью API

В python, когда мы назначаем объекты, такие как list, tuples, dict и т. д. другому объекту, обычно с знаком '=', python создает копию по ссылке. То есть, скажем, у нас есть список таких списков:

list1 = [ [ 'a' , 'b' , 'c' ] , [ 'd' , 'e' , 'f' ]  ]

, и мы назначаем другой список этому списку, например:

list2 = list1

, затем, если мы напечатаем list2 в python, мы получим следующее:

list2 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f ']  ]

Оба списка1 & amp; list2 указывают на то же место в памяти, любое изменение на любое из них приведет к изменениям, видимым в обоих объектах, т. е. оба объекта указывают на то же место в памяти. Если мы изменим list1 следующим образом:

list1[0][0] = 'x’
list1.append( [ 'g'] )

, то как list1, так и list2 будут:

list1 = [ [ 'x', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g'] ]
list2 = [ [ 'x', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g’ ] ]

Теперь переход к неглубокой копии, когда два объекта копируются по мелкой копии, дочерний объект обоих родительских объектов относится к той же ячейке памяти, но любые новые изменения в любом из скопированных объектов будут независимыми друг от друга. Давайте рассмотрим это с помощью небольшого примера. Предположим, что у нас есть этот небольшой фрагмент кода:

import copy

list1 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f ']  ]      # assigning a list
list2 = copy.copy(list1)       # shallow copy is done using copy function of copy module

list1.append ( [ 'g', 'h', 'i'] )   # appending another list to list1

print list1
list1 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g', 'h', 'i'] ]
list2 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f '] ]

уведомление, list2 остается незатронутым, но если мы вносите изменения в дочерние объекты, такие как:

list1[0][0] = 'x’

, тогда как list1, так и list2 будут получить изменение:

list1 = [ [ 'x', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g', 'h', 'i'] ] 
list2 = [ [ 'x', 'b', 'c'] , [ 'd', 'e', ' f '] ]

Теперь, Deep copy помогает в создании полностью изолированных объектов друг от друга. Если два объекта копируются через Deep Copy, то оба родителя & amp; это ребенок будет указывать на другое место памяти. Пример:

import copy

list1 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f ']  ]         # assigning a list
list2 = deepcopy.copy(list1)       # deep copy is done using deepcopy function of copy module

list1.append ( [ 'g', 'h', 'i'] )   # appending another list to list1

print list1
list1 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g', 'h', 'i'] ]
list2 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f '] ]

уведомление, list2 остается незатронутым, но если мы вносите изменения в дочерние объекты, такие как:

list1[0][0] = 'x’

, тогда также list2 не будет затронут как все дочерние объекты и родительский объект указывает на другую ячейку памяти:

list1 = [ [ 'x', 'b', 'c'] , [ 'd', 'e', ' f '] , [ 'g', 'h', 'i'] ] 
list2 = [ [ 'a', 'b', 'c'] , [ 'd', 'e', ' f  ' ] ]

Надеюсь, что это поможет.

0
задан user-44651 25 March 2019 в 19:11
поделиться