can't find remaining reference to type.

hey
I’m trying to make a kind of life sim.
started with basic surviving (person has to find food and eat)
It all works well except for 1 thing, if all the food is eaten and i respawn food the reference to the previous batch seems to remain in, my list of food or my array that gets all the types food, either way after the first respawn i end up with once the amount of food invisible(my guess still a reference to their positions somehow) and once with a fresh batch of food objects.

my code:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Person
{
	private float _health;
	private float _hunger;
	private Vector3 _position;
	private static List<Food> _food=new List<Food>();
	
	public Person ()
	{
		_health=0.0f;
		_hunger=0.0f;
		_position=new Vector3(0.0f,0.0f,0.0f);
	}
	public Person (float health) 
	{
		this._health = health;
	}
	public void Update ()
	{
		if(_health < 5)
		{
			_hunger =-0.001f;
			_health +=_hunger;
		}
		if(_health > 5)
		{
			_hunger =0.01f;
			_health -=_hunger;
		}
		if(_health < 0)
			Debug.Log("death");
		if(_health > 10)
			_health =10;
	}
#region setters and getters
	public float Health
	{
		get{return _health;}
		set{_health = value;}
	}
	public float Hunger
	{
		get{return _hunger;}
		set{_hunger = value;}
	}
	public Vector3 Position
	{
		get{return _position;}
		set{_position = value;}
	}
	public static List<Food> Food
	{
		get{return _food;}
		set{_food = value;}
	}
#endregion	
	public bool Survive ()
	{
		if(_hunger < 0)
			return true;
		else
			return false;
	}
	
	public Vector3 FindFood ()
	{
		Vector3 positionOfClosest= new Vector3(0,0,0);
		
		if(_food.Count > 0)
		{
			float dist= Mathf.Infinity;
			for(int i=0; i<_food.Count; i++)
			{
				float closest= Vector3.Distance(_food[i].Position, _position);
				//Debug.Log(dist+" / "+closest);
				if(closest < dist)
				{	
					dist = closest;
					positionOfClosest = _food[i].Position;
					eat(_food[i]);
					closest = 0;
				}
			}
			return positionOfClosest;
		}
		else
		{
			return Vector3.zero;
		}
		//Debug.Log(positionOfClosest);
	}
	public void eat (Food food)
	{
		if(_position.x == food.Position.x  _position.z == food.Position.z)
		{
			_health +=food.Nutrition;
			_food.Remove(food);
			food.Eaten=true;
			//Debug.Log(_food.Count);
		}
	}
}
using UnityEngine;

[System.Serializable]
public class Food : ScriptableObject
{
	private Vector3 _position;
	private float _nutrition;
	private bool _eaten;
		
	public Food ()
	{
	    _position = new Vector3(0.0f,0.0f,0.0f);
		_nutrition = 0.0f;
		_eaten=false;
	}
	
	public Vector3 Position
	{
		get{return _position;}
		set{_position = value;}
	}
	public float Nutrition
	{
		get{return _nutrition;}
		set{_nutrition = value;}
	}
	public bool Eaten
	{
		get{return _eaten;}
		set{_eaten = value;}
	}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class CreatePerson : MonoBehaviour {
	
	private float speed=0.0f;
	private Person person;
	
	void Start () 
	{
		float Health=Random.Range(1.0f,10.0f);
		person =new Person(Health);
		
	}
	void CollectFood()
	{
		Person.Food=new List<Food>();
		Food[] foods= new Food[0];
		foods=FindObjectsOfType(typeof(Food))as Food[];
		
		if(foods.Length ==0)
		{
			print("starvation");
			return;
		}
		foreach(Food f in foods) 
			Person.Food.Add(f);
		
		print(foods.Length+" / "+Person.Food.Count);
	}
	// Update is called once per frame
	void Update () 
	{
		person.Update();
		if(person.Survive())
		{
			if(Person.Food.Count ==0)
				CollectFood();
			GetFood (person.FindFood());
		}
		
		
		speed+=Time.deltaTime*0.1f;
		person.Position=transform.position;
		if(speed>0.5f)
			speed=0.01f;
		//print (person.Health+" / "+person.Hunger+" / "+Person.Food.Count+" / "+person.Survive());
	}
		
	public void GetFood (Vector3 foodPosition)
	{
		float smooth=(person.Health/10)*speed;
		transform.position=Vector3.MoveTowards(transform.position,new Vector3 (foodPosition.x, transform.position.y, foodPosition.z), smooth);	
	}
}
using UnityEngine;
using System.Collections;

public class CreateFood : MonoBehaviour {
	
	private Food food;
	
	void Awake ()
	{
		food= ScriptableObject.CreateInstance<Food>();
	}
	void Start () 
	{
		food.Position=transform.position;
		food.Nutrition=Random.Range(0.1f, 5.0f);
		gameObject.tag = "food";
	}
	void Update ()
	{
		if(food.Eaten)
		{
			Destroy(gameObject);
			food=null;
		}
	}
}

sorry about the overkill on code posted, but I’ve been looking for 2 days and tried all i could think of, so this I my last desperate attempt before starting over…

grrr ridicules! i can just use Destroy on a reference? or am i mistaken here? a lot of confusing info out there on destroying an instance or it reference.
think i destroy the instance now and have cleared all the reference to it (that part was ok i think)
guess i was just confused about if i could do:

using UnityEngine;
using System.Collections;

public class CreateFood : MonoBehaviour {
	
	private Food food;
	
	void Awake ()
	{
		food= ScriptableObject.CreateInstance<Food>();
	}
	void Start () 
	{
		food.Position=transform.position;
		food.Nutrition=Random.Range(0.1f, 5.0f);
		gameObject.tag = "food";
	}
	void LateUpdate ()
	{
		if(food.Eaten)
		{
			Destroy(food);//About doing this with an instance ...
			Destroy(gameObject);
			print(food);
		}
	}
}