[P/M/K] copy() & deepcopy()

本文详细解析了在数据分析中使用pandas时,浅拷贝(copy())与深拷贝(deepcopy())的区别。浅拷贝保持与原始数据的同步更新,而深拷贝则完全独立于原始数据。通过具体代码示例展示了两种拷贝方式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

copy() & deepcopy()

When we copy one column in a dataframe to use,we are usually talking about .deepcopy() – to take the copy as another new one. As for .copy(), it remains synchronization with the original column in dataframe.It means every action we put on the copy will do the same to the original column.
1

shallow_copy = data.loc[data['parentesco1'] == 1].copy()

2

deep_copy = data.loc[data['parentesco1'] == 1].deepcopy()

deep_copy = data.copy(deep=True)
import os,json,csv,copy from riskAssessment import M_riskAssessment as M_RA def getLevel(risk): srisk=M_RA.getSetting()['srisk'] for index, value in enumerate(srisk[1:5]): if risk<value: return index+1 return len(srisk)-1 def metricsResult(edgeList): series=[] edges=[] namelist=['路径总体数量','最短路径长度','路径长度均值','与起点间距离'] inputPath='../pack_v3.1/input/input.json' resultPath='../pack_v3.1/result/e1_metrics.json' for edge in edgeList: edges.append('E'+edge[2:]) with open(inputPath, 'r') as f: Topo = json.load(f) f.close() Topo['delete_edges'][0]=edges with open(inputPath, 'w') as f: json.dump(Topo, f) f.close() # print("######################") p=os.system('python3 ../pack_v3.1/main_m.py') # print(p) if p==0: with open(resultPath, 'r') as f: metrics = json.load(f) f.close() flag=len(metrics)-1 for item in range(len(metrics)): if metrics[item][0]==0: flag=item # print(flag) break for i in range(len(namelist)): temp=[] for m in range(flag+1): temp.append(metrics[m][i]) series.append({'name':namelist[i], 'type': 'line', 'stack': 'Total', 'areaStyle': {}, 'emphasis': { 'focus': 'series' }, 'data':temp }) return series,edgeList[:flag] else: return 0 def rissEdges(): inputPath='../pack_v3.1/input/input.json' result=[] with open(inputPath, 'r') as f: Topo = json.load(f) f.close() edges=Topo['edges'] for i in range(len(edges)-1): result.append('攻击'+str(i+2)) return result def getAssetsList(): assets=M_RA.getAssets() assetsList=[] for value in assets: assetsList.append({'value':value['host'],'label':value['host']}) return assetsList def getAssetsData(value,scene): assetsChartData={} assetsData={} vulData={} criterionData={} children=[] colorList=[] color={ '高':100, '中':66, '低':33, '3.9':100, '0.8':20, '2.8':80, '2.3':70 } assets=M_RA.getAssets() vulnerability=M_RA.getVulnerability() for asset in assets: if value==asset['host']: for i in asset['children']: for j in assets: if i==j['host']: children+=[{'name':i,'image':j['image']}] assetsChartData.update({'name': '攻击者','image':'pc.png','children':[{'name':value+"\n"+asset['ip'],'image':asset['image'],'edgeName':asset['edge'],'children':children}]}) assetsData.update({'name':asset['name'],'level':asset['level'],'manufacturer':asset['manufacturer'],'ip':asset['ip']}) for vul in vulnerability: if vul['name']==asset['vul']: vulData.update({'name':vul['name'],'type':vul['type'],'cvss':vul['cvss'],'ip':vul['ip']}) criterionData.update({'es':vul['es'],'a':vul['a'],'i':vul['i'],'c':vul['c'],}) colorList+=[color[vul['es']],color[vul['a']],color[vul['i']],color[vul['c']]] break # print(assetsChartData) # print(vulData) return assetsChartData,assetsData,vulData,criterionData,colorList def getRiskResult(): data=[['product', '初始风险', '残余风险']] rrisk=M_RA.getRrisk() edges=[] for item in rrisk[-6:]: data.append([item['time'],item['srisk'],item['rrisk'],item['rrisk_num']]) temp=[] for i in item['edges']: temp.append(i[1:]) edges.append(temp) return data,edges def updataRisk(edge): inputPath='../pack_v3.1/input/input.json' resultPath='../pack_v3.1/result/rrisk.json' rrisk=M_RA.getRrisk() setting=M_RA.getSetting() setRrisk=setting['rrisk'] if rrisk[-1]['rrisk']<=setRrisk: with open(inputPath, 'r') as f: Topo = json.load(f) f.close() Topo['delete_edges'][0]=['E'+edge[2:]] with open(inputPath, 'w') as f: json.dump(Topo, f) f.close() srisk=5 else: edges=copy.deepcopy(rrisk[-1]['edges']) edges.append('E'+edge[2:]) with open(inputPath, 'r') as f: Topo = json.load(f) f.close() Topo['delete_edges'][0]=edges with open(inputPath, 'w') as f: json.dump(Topo, f) f.close() srisk=rrisk[-1]['rrisk'] p=os.system('python3 ../pack_v3.1/main_r.py') if p==0: with open(resultPath, 'r') as f: result = json.load(f) f.close() # print("*************") # print(result) n_rrisk=result['result'] n_rrisk.update({'rrisk_num':copy.deepcopy(n_rrisk['rrisk'])}) n_rrisk['rrisk']=getLevel(copy.deepcopy(n_rrisk['rrisk'])) n_rrisk.update({'srisk':srisk}) rrisk.append(n_rrisk) # print("*************") # print(n_rrisk) M_RA.updataRisk(rrisk) def getEdgesRisk(length): file_list=['impact', 'likehood', 'each_risk', 'depend_risk'] data_list=[] for measure in file_list: path="./uploads/"+measure+".csv" with open(path, 'r') as f: data = list(csv.reader(f)) f.close() temp_list=[] if measure=='depend_risk': temp_list=[0]*length for row in data[1:]: # print(row[1]) if row[1]!='E1': # print(row[1]) temp_list[int(row[1][1:])-2]+=float(row[-1]) # print(int(row[1][1:])-2) else: for row in data[1:]: temp_list.append(float(row[-1])) max_val = max(temp_list) min_val = min(temp_list) avg_val = sum(temp_list) / len(temp_list) partition=[min_val + (avg_val - min_val) / 2,avg_val + (max_val - avg_val) / 2] count_partition1 = 0 count_partition2 = 0 count_partition3 = 0 for value in temp_list: if value<partition[0]: count_partition1+=1 elif value<partition[1]: count_partition2+=1 else: count_partition3+=1 result=[count_partition3,count_partition2,count_partition1] data_list.append(result) # print(data_list) transpose = list(map(list, zip(*data_list))) return transpose def getSysRisk(): rrisk=M_RA.getRrisk() setting=M_RA.getSetting() risk=rrisk[-1]['rrisk_num'] if risk<setting['sysrisk'][1]: return [{'value':0.1,'name':'低危'}] elif risk<setting['sysrisk'][2]: return [{'value':0.33,'name':'中危'}] return [{'value':0.66,'name':'高危'}] def updataSetting(smin,smax): m_setting=M_RA.getSetting() imun=smax-smin m_setting['sysrisk']=[smin,smin+imun/3,smax-imun/3,smax] m_setting['srisk']=[smin,smin+imun/5,smin+2*imun/5,smax-2*imun/5,smax-imun/5,smax] M_RA.updataSetting(m_setting) def getLEdge(): rrisk=M_RA.getRrisk() inputPath='../pack_v3.1/input/input.json' result=[] with open(inputPath, 'r') as f: Topo = json.load(f) f.close() edges=Topo['edges'] Dedges=rrisk[-1]['edges'] for e in edges[1:]: if e['edge_name'] in Dedges: continue result.append('攻击'+e['edge_name'][1:]) return result def getRankData(): # 从数据库获取排序数据 rankA = M_RA.getRankA() # print(rankA) # 如果没有数据,返回默认值 if not rankA: return { "attackTypes": [0,0,0,0,0,0,0,0,0,0], "rankResult": [], "methods": [] } # 构建返回数据 attackTypes = rankA.get("attack_types", []) rankResult = rankA.get("rank_results", []) # 提取所有排序方法名称 methods = [] for item in rankResult: if "name" in item and item["name"] not in methods: methods.append(item["name"]) print( { "attackTypes": attackTypes, "rankResult": rankResult, "methods": methods }) return { "attackTypes": attackTypes, "rankResult": rankResult, "methods": methods }这是总体后端框架代码,我需要理清楚各个模块的功能以及从哪里获取数据,生成了哪些文件,又输出到哪里,不应修改优化代码,仅仅分析代码流程,帮我理清输入输出
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值