2015-09-16 7 views
0

Я довольно новичок в Python, но довольно быстро понял большинство концепций.Как использовать локальные переменные в функциях Python?

Я написал следующую функцию, чтобы получить цифры возврата массива:

def getret(X):                               
    if X:                  
     A = X                 
     B = X                 
     print(A)                 
     print(B)                 
     A.insert(0, 0)               
     print(A)                 
     B.insert(len(X), 0)              
     print(B)                 
     Z = []                 
     for i in range(len(A)):             
      Z.append(B[i]-A[i])             
     print(Z)                 
     return Z                 
    return False 

Проблема, которую я имею, я хочу переменные А и В должны быть обработаны полностью независимо друг от друга, но кажется, что они связаны между собой так как они оба относятся к переменной X.

Когда я кормлю эту функцию массива [1,3,2,5,4] результаты выводятся следующим образом:

[1,3,2,5,4]  # print A = X 
[1,3,2,5,4]  # print B = X 
[0,1,3,2,5,4] # print A.insert(0, 0) 
[0,1,3,2,5,4,0] # print B.insert(len(X), 0) 
[0,0,0,0,0,0,0] # print list B - A 

оказывается Wh en I, чтобы изменить A и B, я фактически изменяю их ссылку X, а не только сохраненную переменную.

В JavaScript я мог бы легко решить эту проблему, установив A и B как локальные переменные X, но я не смог найти такую ​​краткую альтернативу в Python.

Я использую PyCharm и Python 3.4.

+0

Вы должны показать, что вы имеете в виду, как вы это сделаете в JS. AFAIK делает 'var A = X; var B = X' будет иметь тот же результат, что и этот код Python. –

+0

Вы правы. Я смог сделать это в JavaScript, но это произошло не из-за использования «var». Извиняюсь. – alpacinohead

ответ

4

нет необходимости, чтобы сделать копию X, если вы хотите indepedent список:

A = X[:] 

или даже глубокой копии, если элементы в списке являются более сложными, чем числа (что не так в вашем пример):

from copy import deepcopy 
A = deepcopy(X) 

иначе вы просто получите новую ссылку на тот же список.

+0

Это сработало отлично! Спасибо. – alpacinohead

Смежные вопросы