Python中奇怪的变量行为

Python中奇怪的变量行为,python,python-2.7,Python,Python 2.7,我在这里的第一篇文章 因此,我将数据加载到一个名为f1\u data的变量中,然后将其传递给pm.removeDC()函数以进行一些信号处理,并将结果保存到同一个变量中。但是,我只想用原始的f1\u数据替换第8列,我称之为raw\u数据,我不明白为什么它不起作用。下面是函数。有人帮忙吗 内部文件pm.py 解决方案是导入副本并使用copy.deepcopy功能。 有关更多信息,请查看此链接: 当我有raw\u data=f1\u data[:]时,在pm.removeDC()之后,我得到: 但

我在这里的第一篇文章

因此,我将数据加载到一个名为f1\u data的变量中,然后将其传递给pm.removeDC()函数以进行一些信号处理,并将结果保存到同一个变量中。但是,我只想用原始的f1\u数据替换第8列,我称之为raw\u数据,我不明白为什么它不起作用。下面是函数。有人帮忙吗

内部文件pm.py


解决方案是导入副本并使用
copy.deepcopy
功能。 有关更多信息,请查看此链接:

当我有
raw\u data=f1\u data[:]
时,在
pm.removeDC()之后,我得到:

但是当我有
raw\u data=copy.deepcopy(f1\u data)
时,在
pm.removeDC()之后,我得到:


什么不起作用?一个简单的例子(赤裸裸的代码,输出打印语句)对您的理解和我们的故障排除更有用。胡乱猜测:如果您使用
copy.deepcopy
创建
raw\u data
而不是
raw\u data=f1\u data[:]
?是
f1\u数据
一个numpy数组吗?什么是
f1\u数据
?执行
raw_data=f1_data[:]
将创建浅拷贝,您可能需要改用
deepcopy
def removeDC(data):    
    # define the filter
    butter_order = 2
    hp_cutoff_Hz = 1.0
    b, a = signal.butter(butter_order, hp_cutoff_Hz/(fs_Hz / 2.0), 'highpass')

    for i in range(1,9):
        data[:,i] = signal.lfilter(b, a, data[:,i], 0)

    return (data)

def get_epoch1(data, t_sec, epoch, f_tup, col):
#f_tup = (f_wdir, f_name, f_columns, out_save, out_dir, out_number, fig_width)
    f_name = f_tup[1]
    fig_width = f_tup[6]

    epoch_boolvector = (t_sec >= epoch[0][0]) & (t_sec <= epoch[0][1])
    epoch_timescale = t_sec[epoch_boolvector]
    epoch_data = data[epoch_boolvector]

    plt.figure(figsize=(fig_width,8), dpi=96)
    plt.plot(epoch_timescale, epoch_data[:,col]);
    plt.xlim(epoch_timescale[0], epoch_timescale[-1])
    plt.show()
    return (epoch_boolvector, epoch_timescale, epoch_data)
#load the whole data
(f1_data, f1_data_indices, f1_timescale) = pm.load_data(f1_wdir, f1_name)

raw_data = f1_data[:] #create copy of f1_data

(f1ep1_boolvector, f1ep1_timescale, f1ep1_data) = pm.get_epoch1(f1_data, f1_timescale, f1_epochs[1], f1_tup, 8)

#--- filter data to remove DC (1Hz)
f1_data = pm.removeDC(f1_data)


# replace only channel 8 with original data
f1_data[:,8] = raw_data[:,8]
(f1ep2_boolvector, f1ep2_timescale, f1ep2_data) = pm.get_epoch1(f1_data, f1_timescale, f1_epochs[1], f1_tup, 8)
 raw_data is f1_data: False
(raw_data == f1_data).all(): True  
 raw_data is f1_data: False  
(raw_data == f1_data).all(): False