注册 登录
编程论坛 Python论坛

【新人请教】赋值到新对象再改value,为什么原对象也改了?

Log666 发布于 2020-03-05 22:31, 2004 次点击
程序代码:

data = pd.DataFrame(np.arange(15).reshape(3,5),index=['a','b','c'], columns=['1','2','3','4','5'])
# 想尝试赋值到新对象再改个value,但是发现原对象data也被改了
data_change_value = data
data_change_value['1']['a'] = 'alpha'
data_change_value


另外,请教一下,各位一般通过什么平台解答遇到的疑问呀?
能自己解决的还是希望自己解决,不麻烦别人
3 回复
#2
书生牛犊2020-03-05 23:03
额,,,,代码不完整吧,,,   我也是正在学Python,所以不靠谱地猜————

data_change_value = data   //这句话,是不是有可能并不是在复制data中的数据给data_change_value,而是data_change_value成了data的别名。
                    要复制的话,应该是要用构造函数,把data作为参数传进构造函数,才能生成一个复制品吧

像我现在接触的  datatime对象  ,它就都是用    新对象=旧对象.replace()  的方式去复制的

----------------------------------------
初学编程遇到的问题,一般都要靠人工解决的,一开始的时候代码短,拿着报错信息和代码来平台问人,比自己找快多了。
后面学的深了,可以自己去查技术文档。(这是Python的https://docs.)和引用的库,打开库文件也能看到原作者的注释(我英语不好,这个一直看不来)
#3
Log6662020-03-05 23:12
回复错地方了,当我不存在

[此贴子已经被作者于2020-3-5 23:13编辑过]

#4
Log6662020-03-06 10:26
回复 2楼 书生牛犊
确实诶,试了一下,直接复制的话相当于直接引用这个对象,而不是引用对象的值

程序代码:

# Dataframe的话,可以用 copy()
DataFrame.copy(deep=True) # 默认是True,复制值;False相当于引用,原值改变复制的结果随着改变


完结了

[此贴子已经被作者于2020-3-6 10:27编辑过]

1