Help scriptable objects

I am pretty new to Unity and I am trying to create an object that can hold multiple abilities, which are made using scriptable objects. I want to be able to upgrade these objects and have them gain more abilities. As well as being able to pick up and transfer the item between inventories, which I have set up using scriptable objects, while still keeping the abilities gained from previous upgrades. Should I use scriptable objects to make this object? Or is there a better way of doing this? I’m open to any suggestions

ScriptableObject usage in RPGs:

There was some discussion on this here: Best practices for managing large amounts of ScriptableObject data?

If you intend for your abilities to be mutable, then they would be better as plain C# objects, with scriptable objects as factories for said abilities. A container for said abilities/upgrades could also be a plain C# object, which should make saving the current state of abilities to disk easier then. Then that container object can just be used in a monobehaviour.