Why the difference in instantiation of a Transform, RigidBody, or GameObject?

Var Shooter : GameObject;

Var shotdone = instantiate(Shooter, transform.position, transform.rotation);

So what is the difference?

Unity Script Reference - Instantiate()

When you instantiate a GameObject, the GameObject passed in is duplicated as well as all the components added to it, and the method returns the new GameObject.

If you instantiate a UnityEngine.Component, like Rigidbody or Transform, the GameObject the Component belonged to gets duplicated, as well as other components attached to it, and the method returns the component corresponding to the one passed in, but from the new new GameObject that was created.

So all calls to Instantiate accomplish the exact same thing, duplicating a GameObject, but the only thing that changes (depending on the variable that was passed in) is what is returned; a Component from the new GameObject or the GameObject itself