Функции памяти Python кровоточат - PullRequest
0 голосов
/ 28 июня 2018

У меня есть функция, в которую я передаю переменные. Я не изменяю имена переменных.

Я ожидаю, что переменная внутри функции будет рассматриваться как локальная переменная, но в некоторых случаях она, по-видимому, фактически меняет переменную с тем же именем вне функции. Я не думаю, что это должно происходить. Кто-нибудь испытывал это?

Итак, у меня есть это:

def(df1,df2,df3)

    df1.set_index('A',inplace=True)

    df2['c'] = df1['B'] * df3['G']

    return df2

Я обнаружил, что df1.set_index('A',inplace=True) меняется df1 вне функции. Поэтому, когда я снова вызываю функцию, я получаю сообщение об ошибке, потому что функция не «видит» df1 ['A'] в df1. Он видит, что df1, переданный извне, имеет индекс, установленный в 'A', уже при более раннем вызове.

Кто-нибудь может кровоточить?

1 Ответ

0 голосов
/ 28 июня 2018

В функции Python значения параметров передаются по присваиванию ( переданный параметр является фактически ссылкой на объект, но ссылка передается по значению ), поэтому, если вы измените df1 you ' измените фрейм данных, который был передан в качестве параметра в функции.

Возможно, вы захотите использовать copy

def func(df1,df2,df3):
    df1 = df1.copy()
    df1.set_index('A',inplace=True)

    df2['c'] = df1['B'] * df3['G']

    return df3

Примечание. По умолчанию deep параметр функции копирования равен True, поэтому может использоваться память из-за дублирования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...