Scriptable Object storing Instantiated Objects Show Mismatch Types

I am trying to use scriptable objects as a precompiled database of cards which are also scriptable objects. The below works except the scriptable database object shows a type mismatch. I have checked here for solutions and cannot seem to determine the issue. The scriptable carddatabbase contains the card definitions like so:

[CreateAssetMenu(fileName = "New Card Database", menuName = "Game/Card Database")]
public class CardDatabase : ScriptableObject
    // definition of all cards in the game by name
    public Card heavySlash;
    public Card herbalBandage;

Here is an extended card database for the player to load their current game from. This will call the saving method which will be mentioned further down the post:

[CreateAssetMenu(fileName = "New Card Database", menuName = "Game/Player Card Database")]
public class PlayerCardDatabase : CardDatabase
    public List<Card> cards;

    public void Clear()
        cards = new List<Card>();

    public void Save(List<Card> deck)

        foreach (Card card in deck)
            Card newInstance = new Card();
            newInstance = card;

            // Note: The below works obviously but the memory is shared
            // I want to have each card object independent so I can modify them during runtime
            // cards = deck; 

The cards store standard info such as name and attack stats and other attributes.

[CreateAssetMenu(fileName = "New Card", menuName = "Game/Card")]
public class Card : ScriptableObject {
    //name of card
    public new string name;
    public CardType type;
    public Texture texture;
    public int damage;
    public int manaCost;
    public bool destroyEquipment;
    public int heal;

During runtime I generate the player cards saving it to the scene list. These are typically loaded but in this instance on a new game well call this function instead to instantiate a deck, add copies of our scrip table objects via Instantiate and then save it to load for later:

         void CreateCards(bool firstTime = false)
            if (firstTime)
                //flush out our cards, will be moved to when new game button is created

                Card heavySlash2 = Instantiate(cardDatabase.heavySlash);
                Card herbalBandage2 = Instantiate(cardDatabase.herbalBandage);

                for (int i = 0; i < 7; i++)


Unfortunately when the playerCardDatabase.Save(deck); is called the inspector shows mismatype of cards.

I redid most of the code but in short I had a Scriptable object ScriptableCard, a regular class Card and a ScriptableObject CardDatabase.

I simply make a copy to inherit the information from ScriptableCard using the below below:

    public Card Copy()
        Card card = new Card(); =;
        card.type = this.type;
        card.sprite = this.sprite;
        card.texture = this.texture;
        card.damage = this.damage;
        card.manaCost = this.manaCost;
        card.destroyEquipment = this.destroyEquipment;
        card.heal = this.heal;

        return card;

During runtime I would call it like so:

                Card heavySlash = cardDatabase.heavySlash.Copy();

Hopefully this helps others in the futureā€¦