You may wish to consider reaching for ScriptableObjects for this.
For runtime modified data you can always Instantiate() a fresh transient copy of the weapon SO from the base original stats.
ScriptableObject usage in RPGs:
Usage as a shared common data container:
2 Likes