Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 6, 2011 12:05:05

Kotjara2
От:
Зарегистрирован: 2011-02-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Некоторые воросы по питону

Добрый день.
Прошу Вас намекнуть, посоветовать.
1) я правильно поняла. Что в питоне параметры в функцию передаются только по ссылке. В книге Россума Язык программирования Python написано:
автор
Аргументы функции в момент вызова пмещаются в локальную таблицу имен вызываемой функции. Т. о. аргументы передаются по значению (где аргумент всегда является ссылкой на объект, а не его значением)

2)в лекциях написано, что параметры передаются по ссылке и есть два вида передачи(как я поняла): один, когда меняем копию меняем объект, другой теневая копия-создается копия и меняя ее объект уже не меняется, делается это с помощью

import copy
b = copy.deepcopy(a)
то есть a не меняется при изменении b.
И я что-то не понимаю….
Приведите, пожалуйста пример передачи параметра по ссылке с использованием deepcopy
Пожалуйста, а то я не знаю……
Помогите, пожалуйста.



Офлайн

#2 Фев. 6, 2011 13:07:20

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Некоторые воросы по питону

>>> l = [] # изменяемый тип list
>>> x = 1 # неизменяемый integer
>>> def forlist(mylist):
... mylist.append('+++')
...
>>> def forint(y):
... y = y+1
...
>>> forlist(l)
>>> forlist(l)
>>> forlist(l)
>>> l
['+++', '+++', '+++']
>>> forint(x)
>>> forint(x)
>>> forint(x)
>>> forint(x)
>>> x
1
>>> import copy
>>> l2 = [] # изменяемый тип list
>>> forlist(copy.deepcopy(l2)) # передаем ссылку уже на другой объект
>>> forlist(copy.deepcopy(l2))
>>> forlist(copy.deepcopy(l2))
>>> l2
[]



Офлайн

#3 Фев. 6, 2011 13:14:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Некоторые воросы по питону

class Tx:
pass

def f(s):
print "in",id(a)
a=5
print id(a);f(a)
f(5)
a=55555555
print id(a);f(a)
f(55555555)
a=55555555554.+1
print id(a);f(a)
f(55555555555.)
a=Tx()
print id(a);f(a)
id дает адрес объекта

def g(a):
print id(a)
a+=1
print id(a)

a=5
print id(a)
g(a)
print a
В первом примере видно - передаются адреса но
во втором - имеющаяся ссылка - константная - при изменении объекта - создается новый объект (это и без функции так будет)
изменяемые объекты будут обычными ссылками.



Офлайн

#4 Фев. 6, 2011 14:30:10

Kotjara2
От:
Зарегистрирован: 2011-02-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Некоторые воросы по питону

Уважаемые sp3, doza_and!!
Спасибо Вам огромное за сооооооооооооооообщение, очень Вам признательна!!!!!!!!!!!!!!!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version