不能使深拷贝变量不断变化

时间:2018-05-29 16:59:34

标签: python variables deep-copy

我试图为freq保留一个值。 每次我调用函数cut,它都会改变它。 在堆栈溢出时,我发现put [:]应该可以工作,但是在我的代码中它并没有。我使用剪切功能将值0分配给某些fft值,然后执行ifft以获得更清晰的信号。

这是代码:

import numpy as np 
import matplotlib.pyplot as plt
#from scipy import signal



time=np.linspace(0,10, 10000)
sig=np.sin(np.pi*time*20)

plt.plot(time, sig)
plt.show()

def time_zero(t): #outputs a time array that begins from 0. 
    N=len(t) #number of total time points. 
    T=t[len(t)-1]-t[0]#total time in seconds
    dt=T/N  #each timespet
    fs=N/T
    t=np.arange(0,T,dt) #time array that begins from 0 
    return t,N,T,dt,fs


def transform (x,y):
    t,N,T,dt,fs=time_zero(x)
    fourier=np.fft.rfft(y, norm="ortho")
    freq=np.fft.rfftfreq(N,dt)
    return freq, fourier.real
#    s=np.fft.ifft(fourier)

def intransform (freq,fourier):
    t,N,T,dt,fs=time_zero(freq)
    signal=np.fft.irfft(fourier,norm="ortho")
    return signal


def cutter(freq,fft,cut):
    t,N,T,dt,fs=time_zero(freq)
    new_lst = fft[:][:] #makes a copy not just assigned the same value to 

the name https://stackoverflow.com/questions/24171120/variable-changes-without-being-touched

        for i in range (cut*int(fs),len(new_lst)):
            new_lst[i]=0
        return new_lst

freq, fft=transform(time,sig)

#
plt.plot(freq,fft)
plt.xlim(0,30)
plt.show()


cut=cutter(freq,fft, 3)

print (cut==fft)



plt.plot(freq,fft)
plt.xlim(0,30)
plt.show()


ifft=intransform(freq,fft)

#
plt.plot(time_zero(time)[0],ifft)

plt.show()

1 个答案:

答案 0 :(得分:-1)

创建一个如下所示的新列表: new_lst = [f为f in freq]