### Version 3.0.0-beta.15 ### Reproduction link [https://codesandbox.io/s/cool-lovelace-kw6hp?file=/src/App.vue](https://codesandbox.io/s/cool-lovelace-kw6hp?file=/src/App.vue) ### Steps to reproduce import { reactive, watch } from 'vue' export default { mounted() { }, setup() { const msg1 = reactive({ val: 1 }); watch(msg1, (val, oldVal) => { console.log(val === oldVal); // true? console.log(`new val: ${val.val}, old val: ${oldVal.val}`); }); const changeMsg1 = () => { msg1.val = 1; }; return { msg1, changeMsg1 }; } }; ### What is expected? "val == oldVal" is false "val.val === oldVal.val" is false ### What is actually happening? "val === oldVal" is true "val.val === oldVal.val" is true --- this app is use vue-cli3 create,then use "vue add vue-next" change version vue2 to vue3。 <!-- generated by vue-issues. DO NOT REMOVE -->