At the risk of flogging a dead horse, this is one of those context-free questions that is tough to answer without information specific to your needs.
I won't rehash what people have described about commonly used environments, but I would like to offer a few things to consider.
As with most things, there are no best practices, there is what is appropriate for the situation you find yourself in. I've worked in companies where you could rapidly clone an entire environment and have as many running as your hardware had the capacity to support. I've worked in other places where the environment was so ponderously large that mimicking the entire thing 1:1 would have been ridiculously expensive. I've seen places with very relaxed development processes and others where things were very rigid and strictly controlled. How we worked within each of those constraints (or sometimes outside of them) differed from one to another.
Here are some things that might affect what environment(s) you have and what you use them for.
- What sort of development style are you using? Are you working in a waterfall environment? an agile one? somewhere in between?
- What kind of testing are you looking to do?
- How do you update your environment? Do you get builds delivered to you? Do you pull code from the repository?
- Are your environments small and self-contained or large and complex?
- Are you using individual data sources or do multiple environments share a single db? (I've seen both)
- Do developers and testers work very closely together or are they separated (by time, distance, culture...)
- Do you mock up any part of your environment? Does that change over time?
- How do you release software to production?
and so on
Answer some of these questions, then see what questions you have about different environments (you know, unless you really were looking for a pat answer to an interview question :P )